除了PUT请求之外,所有代码都能正常工作。当请求被发送时,请求作为GET请求工作。关于这个问题,我找不到任何解决办法。堆栈溢出中的PUT请求在ajax、jqueryE 211等中充当 get 请求存在许多问题,无法在nodejs中应用任何信息。
控制台:
GET /update-book?bookId=12345&************ 404 5.883 ms - 1223app.js:
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const bodyParser = require('body-parser');
const movieRouter = require('./routes/movie-router');
const bookRouter = require('./routes/book-router');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', movieRouter);
app.use('/', bookRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;book-router:
const router = require('express').Router();
ObjectID = require('mongodb').ObjectId;
const collection = require('../database-connection');
router.get('/book', async function(req, res, next) {
res.render('book');
})
router.get('/find-book', async function(req, res, next) {
await collection.findOne({bookId: req.query.bookId})
.then(resp => {
console.log(resp);
return resp
})
.then(data => {
console.log(data);
res.render('view-book', {
bookId: data.bookId,
book_name: data.book_name,
book_author: data.book_author,
book_publisher: data.book_publisher
});
})
})
router.post('/add-book', async function(req, res, next) {
await collection.insertOne({
bookId: req.body.bookId,
book_name: req.body.book_name,
book_author: req.body.book_author,
book_publisher: req.body.book_publisher
})
console.log(req.body);
res.send('posted');
})
router.put('/update-book', async function(req, res, next) {
await collection.updateOne({
bookId: req.query.bookId
}, {
$set: req.body
})
})
module.exports = router;book.ejs:
<!DOCTYPE html>
<html>
<body>
<form action="/add-book" method="POST">
<label>Book ID:</label>
<input type="text" name="bookId" /><br>
<label>Book Name:</label>
<input type="text" name="book_name" /><br>
<label>Author:</label>
<input type="text" name="book_author" /><br>
<label>Publisher:</label>
<input type="text" name="book_publisher" /><br>
<button type="submit">ADD</button>
</form>
<br><br><br><br>
<form action="/find-book" method="GET">
<label>Book ID Name:</label>
<input type="text" name="bookId" /><br>
<button type="submit">FIND</button>
</form>
<br><br><br><br>
<form action="/update-book" method="PUT">
<label>Book ID:</label>
<input type="text" name="bookId" /><br>
<label>Book Name:</label>
<input type="text" name="book_name" /><br>
<label>Author:</label>
<input type="text" name="book_author" /><br>
<label>Publisher:</label>
<input type="text" name="book_publisher" /><br>
<button type="submit">UPDATE</button>
</form>
</body>
</html>view-book.ejs:
<!DOCTYPE html>
<html>
<body>
<h1>Book ID: <%= bookId %></h1>
<h1>Book Name: <%= book_name %></h1>
<h1>Book Author: <%= book_author %></h1>
<h1>Publisher: <%= book_publisher %></h1>
</body>
</html>发布于 2022-08-19 13:35:11
应该使用重写方法将get请求更改为
npm i method-overrideconst methodOverride = require("method-override")
app.use(methodOverride('_method'))<form action="/update-book?_method=PUT" method="POST">如果你有一个deleteRouter,你也会这样做
有关更多信息,请参考以下内容
https://levelup.gitconnected.com/using-the-method-override-express-middleware-3853a115a5ca
https://stackoverflow.com/questions/71812272
复制相似问题