gpt4 book ai didi

javascript - 禁用文件上传的 bodyparser - Nodejs

转载 作者:行者123 更新时间:2023-12-03 04:44:49 25 4
gpt4 key购买 nike

这个问题与 How to disable Express BodyParser for file uploads (Node.js) 非常相似。他们提供的答案是针对 Express3 的,我已经尝试过使用更新的 Express 4 的解决方案,但似乎不起作用。

我正在使用 Node.js + Express 构建 Web 应用程序。我正在使用另一个库 BodyParser 来解析 post 参数。但是,我希望能够更精细地访问多部分表单数据帖子 - 我需要将输入流通过管道传输到另一台服务器,并且希望避免首先下载整个文件。

所有文件上传都会在到达我的任何函数之前使用“request.files”自动解析并上传和可用。

有没有办法让我禁用多部分表单数据帖子的 BodyParser,而不禁用其他所有内容?

这是我的 app.js 文件。在这里,我定义了一个身份验证路由,该路由不应排除任何文件,而只是一个 token (POST 参数)。我还定义了另一条称为上传的路线。该路由接受文件和 POST 参数(表单数据)。仅当身份验证路由允许时才会调用此路由。因此,在身份验证路由中,我不希望允许表单数据,但在上传路由中我希望允许。因此,当我收到上传某些内容的请求时,它将先经过身份验证路由,然后再经过上传路由。因此,我需要允许身份验证路由允许我不想要的文件(表单数据)。所以我希望 bodyparser 在 auth 路由中工作,同时我在上传路径中使用 mutler (另一个库)来解析我的上传文件。当然,在我的实际应用程序中,我有更多的路线,并且希望以最少的冗余尽可能干净地编码。

var express = require('express');
var app = express();


var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({
extended: true
}));


var route_auth = require('./routes/auth');
app.use('/api/post/*', route_auth);
var route_upload = require('./routes/post/upload');
app.use('/api/post/upload', route_upload );


app.listen(3000, function() {
console.log('Server listening on port 3000!')
});

我的身份验证路线如下所示:

router.post("/", function(req, res, next) {
if(everythingiscool){
return next()
}
next(err);
});

我的上传路线如下:

var express = require('express');
var router = express.Router();
var multer = require('multer')
var upload = multer({ dest: 'uploads/' });

router.post("/", upload.single('avatar'), function(req, res, next) {
//work with req.file
});

最佳答案

将 bodyParse 中间件包装在一个函数中,该函数检查请求正文的 Content-Type 是否为多部分:

var isMultipart = /^multipart\//i;
var bodyParser = require('body-parser');
var urlencodedMiddleware = bodyParser.urlencoded({ extended: true });
app.use(function (req, res, next) {
var type = req.get('Content-Type');
if (isMultipart.test(type)) return next();
return urlencodedMiddleware(req, res, next);
});

关于javascript - 禁用文件上传的 bodyparser - Nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42917469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com