首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >body-parser和multer读取multipart + json

body-parser和multer读取multipart + json
EN

Stack Overflow用户
提问于 2017-10-05 14:16:47
回答 1查看 3K关注 0票数 0

在我的nodejs express应用程序中,我使用body-parser读取json请求,使用multer上传文件。我总是在json中发送一些信息,因为基于此,我需要知道用户是否被允许上传。为了进行测试,我使用这个httpie命令。

代码语言:javascript
复制
http -vf POST localhost:9090/upload file@test.txt id=638381

这个请求通过了几个中间件,但是只有在multer之后的中间件才能访问req.body.id,在multer之前,我为req.body得到了一个空的json。

在下面的最小示例中,目前只有gridfsUpload可以看到id,但如果我向上或向下移动multer,则会发生变化。

代码语言:javascript
复制
var http = require('http');
var express = require('express')
var bodyParser  = require('body-parser');
var argv = require('minimist')(process.argv.slice(2),{default:{port:8081}});
var multer  = require('multer');

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    dir = __dirname+ '/tmp/'

    cb(null, dir)
  },
})

var app = express();

app.use(bodyParser.urlencoded({ extended: true,limit:'10mb' }));
app.use(bodyParser.json({limit: '10mb'}));

app.use((req,res,next) => {


    console.log("body 1",req.body)
    console.log("head 1",req.header)
    next()

    })


var gridfsUpload = function(options){
    return function (req, res, next) {
    console.log("body 2",req.body)
    console.log("head 2",req.header)
        res.end()


    }
}

var checkrole_measurement = (options) => {
    return function (req, res, next) {

    console.log("body 3",req.body)
    console.log("head 3",req.header)
    next()

    }   
}

app.post('/upload',

                checkrole_measurement(),
                multer({ storage: storage }).any(),
                gridfsUpload(),
        function(req,res,next){
                            ;
                }
);    


var httpServer = http.createServer(app);
httpServer.listen(argv['port']);

我真的很想在multer之前检查一下id,因为这样一个未经授权的人可以上传文件,然后,当我可以检查到这不应该发生时,我需要删除它。如果我一开始就不把请求传递给multer,事情会简单得多。

EN

回答 1

Stack Overflow用户

发布于 2017-10-05 14:24:36

有两种方法可以完成此操作:

1:不在body中传递ID,而是将它们传递到header中。因此,通过这种方式,您可以使用req.headers轻松地解析id

2:不使用multer作为中间件,您可以将其用作普通函数。在此方法中,body将由body-parser解析,文件将由multer上传。

代码语言:javascript
复制
app.post('/upload',checkrole_measurement(),
               gridfsUpload(),
               function(req,res,next){
         multer({ storage: storage }).any() ;                  
}); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46579006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档