【问题标题】:why Route.post() requires a callback function but got a [object Object]为什么 Route.post() 需要一个回调函数但得到一个 [object Object]
【发布时间】:2021-07-16 12:09:45
【问题描述】:

我正在尝试将我的文件保存在特定路径中并保存在 mongodb 中,这里我在route.js 中使用中间件uploadImg,但得到和 Error: Route.post() requires a callback function but got a [object Object]

这里有什么问题,请帮助我这里哪里错了。提前谢谢!!

config/imageUpload.js:-

  const multer = require("multer"),
  storage = multer.diskStorage({
     destination: function (req, file, cb) {
     cb(null, 'uploads')
  },
  filename: function (req, file, cb) {
     cb(null, file.fieldname + '-' + Date.now())
   }
  })
  const uploadImg = multer({storage: storage}).single('image');
     module.exports = {
       uploadImg: uploadImg,
     }
  return uploadImg;

controllers.js:

exports.addRoleFields = async (req, res) => {
  const rolesExist = Role.find({ roleType : req.body.roleType })
  if (rolesExist.length > 0){
    res.status(201).send({ message: "Role already exist", statusCode: "201" });
   }
  else {
  const rolesList = new Role ({     
    roleType : req.body.roleType,
    roleImg  : req.file.path,
  });
rolesList
.save(rolesList)   
  .then(data => {
    res.status(200).send({ data, statusCode: "200" });
  })
  .catch(err => {
    res.status(500).send({
      message: err.message || "Some error occurred while creating.",
      statusCode: "500"
    });
  })
 }
}

routes.js:

module.exports = app => {
 const roles = require("../controllers/roles.js");
 const  uploadImg  = require("../config/imageUpload");
    var router = require("express").Router();
    router.post("/addRole",uploadImg  ,roles.addRoleFields);
    app.use('/api/roles', router);
};

【问题讨论】:

    标签: node.js mongodb multer


    【解决方案1】:

    在您的 config/imageUpload.js 中,您正在导出一个包含您创建的中间件的对象。 您可以:

    • 在 imageUpload.js 中直接导出中间件(更简单)
        const multer = require("multer"),
            storage = multer.diskStorage({
                destination: function(req, file, cb) {
                    cb(null, 'uploads')
                },
                filename: function(req, file, cb) {
                    cb(null, file.fieldname + '-' + Date.now())
                }
            })
        const uploadImg = multer({
            storage: storage
        }).single('image');
        module.exports = uploadImg
    
    • 或者,改为通过在您的 routes.js 中解构中间件来导入
        module.exports = app => {
            const roles = require("../controllers/roles.js");
            const { uploadImg } = require("../config/imageUpload");
            var router = require("express").Router();
            router.post("/addRole", uploadImg, roles.addRoleFields);
            app.use('/api/roles', router);
        };
    

    【讨论】:

    • 我在route.js 中添加了const { uploadImg } = require("../config/imageUpload");,但仍然遇到同样的问题
    猜你喜欢
    • 2020-06-29
    • 2020-12-20
    • 2021-03-31
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多