【问题标题】:Accessing form-data with multer in Express js/Node在 Express js/Node 中使用 multer 访问表单数据
【发布时间】:2021-08-01 20:31:38
【问题描述】:

我有一条路线,其中我有一个简单的中间件,之后我有一个 multer 中间件,然后我有我的最终功能。我似乎无法弄清楚如何从第一个中间件的前端访问我的表单数据。我可以在 multer 中间件之后的最终函数中访问它们,但不能在第一个中间件中访问它们。我从前端发送 id,在我的路由的最终功能中,我可以将 id 作为 req.body.id 访问。但是我无法在我的第一个中间件中访问它。下面是我的路线

route.post('/upload', [checkSize, upload.single('file')], file_controller.upload)

下面是我的 checkSize 中间件

var db = require('../database/connection');

checkSize = async (req, res, next) => {

let dbo = await db();

let initSize = await dbo.stats();

if(1 === 1){

    return res.send("middleware is working" + " " + req.body.id);

}else{

    req.initSize = initSize.dataSize/1000000
    next()
}
}
    module.exports = checkSize

响应中的结果是

“中间件正在工作未定义

【问题讨论】:

    标签: node.js express multipartform-data middleware multer


    【解决方案1】:

    首先,你需要改变中间件的顺序。

    route.post('/upload', [upload.single('file'), checkSize], file_controller.upload)
    

    第二个文件位于req.file 而不是req.body 字段。 req.body 字段将包含表单的所有文本字段。

    【讨论】:

    • 不,实际上我需要在上传之前使用我的 checkSize 中间件,因为我需要根据某些条件上传。这个条件在 checkSize 中。我需要 checkSize 中间件中的 req.body,因为我的条件需要来自表单数据的文本字段。我从我的表单发送文件和文本字段(id)
    • 好吧,multer 处理表单数据,所以在multer 处理表单数据之前您无法访问它,因此您需要更改订单,然后您可以拒绝该请求,如果它不符合您的要求。
    • 这对我不起作用。我使用 multer gridfs 存储,我需要在上传我的文件之前检查另一个 mongodb 集合,并检查该集合我需要一个我从我的表单数据发送的 id。所以我需要在 checkSize 中间件中访问该 ID
    • 解决方法是稍微改变一下逻辑,multer应该将文件上传到reques.file字段,然后你应该添加自定义逻辑将它上传到MongoDB GridFS,这样你就可以执行获取文件和表单数据后进行验证,如果一切正常,将其上传到 MongoDB GridFS。这有帮助吗?
    • 没有。一旦gridfs存储文件功能运行,就有办法阻止图像上传。剩下的唯一选择是创建另一个 api 来检查条件并从前端处理它。互联网和 nodeJs 真的让我失望了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2021-02-04
    • 1970-01-01
    • 2021-07-25
    • 2017-10-08
    相关资源
    最近更新 更多