我对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解析器的失败)

提前致谢。

最佳答案

默认情况下,您不应该对每条路线都使用bodyParser()。实际上,您只应将bodyParser()用于需要分段上传的路由。



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);

关于node.js - Restify 2.6.1如何针对特定请求禁用主体解析器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21498856/

10-10 23:41