【问题标题】:Limit express-busboy to specific routes将 express-busboy 限制在特定路线上
【发布时间】:2017-01-04 07:30:22
【问题描述】:

我使用存储库 here 中的示例使用 express-busboy 设置文件上传 这似乎没有使用正常的use() 语法,所以我对如何实际限制这个中间件有点困惑,所以它只在特定的路由上执行,因为它破坏了其他 POST 请求。

这是我的配置方式:

var busboy = require('express-busboy');

busboy.extend(app, {
    upload: true,
    path: './uploads/temp'
});

【问题讨论】:

    标签: node.js express file-upload middleware busboy


    【解决方案1】:

    在 allowedPath 值中,您可以在这种情况下指定正则表达式限制在快速应用程序中定义的发布路由。喜欢/上传

    busboy.extend(app, {
        upload: true,
        path: './uploads/temp',
        allowedPath: /^\/uploads$/
    
    });
    

    或者其他方式你可以传递函数

    var options = {
            upload: true,
            path: './uploads/temp',
    
    
        };
    options.allowedPath = function(url) {
        return url == '/api/ccUpload';
    }
    
        busboy.extend(app, options);
    

    【讨论】:

    • 哦,我没有意识到那是那个选项的作用。无论如何,它似乎对我不起作用,我只想为路线 /api/ccUpload 启用 busboy,所以我做了allowedPath: '/^\/api/ccUpload$'。上传仍然有效,但它仍然打破了我的其他 POST 路线。我是否使用了正确的正则表达式?
    • 您要上传的具体发布路线是什么?
    • 使用 /^\/api\/ccUpload$/ 不带任何单引号或双引号
    • 不,仍然有同样的问题。当我删除我在原始帖子中提供的代码时,一切正常。然后,当我添加 busboy 代码时,我所有其他不是 multipart/form-data 的 POST 请求都会停止工作,永远挂起,永远不会发回响应。
    • 仍然没有,实际上这与使用 keystone.js 有什么关系吗?在 keystone 中,我在我的 express 实例上设置了我的中间件和其他配置,然后将其传递给 keystone,然后由它处理实际的路由定义。
    【解决方案2】:

    好吧,因为 express-busboy 不适合我,所以我尝试使用 express-fileupload 来代替,现在似乎可以了。

    【讨论】:

      【解决方案3】:

      尝试改用Multer,并将其限制在您的路线中:

      app.post('/^\/api\/ccUpload$/',
        multer({
          dest: './uploads/temp',
          rename: function(fieldname, filename, req, res) {
            return filename.toLowerCase();
          }
        }),
        yourRouteHandler
      );
      

      【讨论】:

        猜你喜欢
        • 2019-08-26
        • 2012-05-18
        • 2022-11-11
        • 1970-01-01
        • 2022-12-20
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        相关资源
        最近更新 更多