所以我用MongoDB/Express/Mongoose做了一个简单的NodeJS应用程序。在我的mongoose模式中,我有一个带有默认值的字段(pictureURL),问题是如果pictureURL是空字符串,默认值就不会被应用。为了解决这个问题,我考虑在创建或更新模型时使用自定义中间件来执行POST请求。
但是我遇到的问题是中间件的req.body是未定义的。在www.example.com方法中是可以router.post的,但在中间件中就不行了。下面是我的代码。
中间件(pictureU.js)
const app = require('../app');
const bookPictureUrl = (res, req, next) => {
console.log({ body: req.body });
if (!req.body.pictureUrl)
req.body.pictureUrl = 'images/default';
next();
};
module.exports = { bookPictureUrl };
book.routes.js
const app = require('../app');
const router = require('express').Router();
const Book = require('../models/Book.model');
const { bookPictureUrl } = require('../middleware/pictureUrl');
router.post('/update/:id', bookPictureUrl, async (req, res, next) => {
try {
req.body.authors = req.body.authors.split(',');
const data = await Book.findByIdAndUpdate(req.params.id, req.body);
res.redirect('/books');
} catch (err) {
next(err);
}
});
任何帮助试图修复这个问题,使我可以使用req.body在中间件将不胜感激。
谢谢
1条答案
按热度按时间nqwrtyyt1#
您混淆了参数顺序。
req
应该在res
之前。