解决2.6.1如何禁用特定请求的主体解析器

 姚威阳_489 发布于 2023-01-29 21:52

我对node.js服务很新,我遇到了multipart/form-data内容类型的问题.我需要一种方法来禁用特定请求的主体解析器功能.我正在使用restify 2.6.1.以下是配置的一些片段.

我的设置是:

    App.js :

    server.use(restify.authorizationParser());
    server.use(restify.dateParser());
    server.use(restify.queryParser());
    server.use(restify.jsonp());

    server.use(restify.bodyParser());
    server.use(restifyValidator);
    server.use(restify.gzipResponse());
    server.use(passport.initialize());
    server.use(restify.conditionalRequest());


Route.js : 
       app.post({path: '/test/upload/:upload_image_name', version: ver}, uploadCtr.uploadImage);
       app.post( {path: '/test/upload/:upload_image_name', version:ver }, passport.authenticate('bearer',{ session: false}),uploadCtr.uploadImage);

没有restify.bodyParser()上传图像正在工作(但依赖于json解析器的所有内容都失败了)

提前致谢.

1 个回答
  • bodyParser()默认情况下,不应该为每个路由使用.实际上,您应该只bodyParser()用于需要分段上传的路由.

    使用express.bodyParser的所有服务器都容易受到攻击,这会在服务器上创建无限数量的临时文件,可能会占用所有磁盘空间,这可能会导致服务器挂起.

    示范

    这个问题非常容易证明.这是一个简单的快递应用程序:

    var express = require('express');
    var app = express();
    
    app.use(express.bodyParser());
    app.post('/test', function(req, resp) {
      resp.send('ok');
    });
    
    app.listen(9001);
    

    看起来很无害对吗?

    现在用以下内容检查你有多少个临时文件:

    $ ls /tmp | wc -l
    33
    

    接下来模拟上传多部分表单:

    $ curl -X POST -F foo=@tmp/somefile.c http://localhost:9001/test
    ok
    

    返回并查看我们的临时文件计数:

    $ ls /tmp | wc -l
    34
    

    那是个问题.

    http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html

    Restify也存在这个问题.

    您可以通过替换.bodyParser()为:

    server.use( restify.queryParser() );
    server.use( restify.jsonBodyParser() );
    

    但是要回答关于特定路由的问题,您应该将所有路由不需要的任何中间件移动到路由特定的中间件中:

    server.get('/route', restify.queryParser(), restify.jsonBodyParser(), routeHandler);
    

    这也可以采用数组:

    var routeMiddleware = [
          restify.queryParser(),
          restify.jsonBodyParser()
        ];
    
    server.get('/route', routeMiddleware, routeHandler);
    

    2023-01-29 21:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有