javascript 自定义中间件Express中未定义请求主体

rnmwe5a2  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(123)

所以我用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在中间件将不胜感激。
谢谢

nqwrtyyt

nqwrtyyt1#

您混淆了参数顺序。req应该在res之前。

const bookPictureUrl = (req, res, next) => {
  console.log({ body: req.body });
  if (!req.body.pictureUrl)
    req.body.pictureUrl = 'images/default';
  next();
};

相关问题