【问题标题】:Sails.js (0.10.5) file upload with custom middlewareSails.js (0.10.5) 使用自定义中间件上传文件
【发布时间】:2016-05-26 09:14:22
【问题描述】:

我现在正在维护一个sails.js 应用程序,但它是由不同的开发人员编写的。我不太精通风帆,难以实现文件上传。

一般来说,我了解sails 使用skipper 处理文件上传,并且上传API 可通过skipper 使用。此外,我设法创建了一个新的准系统应用程序,并且在其中我能够按照文档中提供的示例进行文件上传。

不过,在我的完整应用程序中,http 配置中有一些自定义项。在我的控制器中,req.fileundefinedfiles 也是如此)。

此外,比较完整应用程序和测试应用程序的 config/http.js 结构是不同的。 AFAIK,真实应用程序和测试应用程序都是 0.10.5(但在我的计算机上,全局风帆是 0.12.x,尽管在新的应用程序文件夹中我看到风帆 0.10.5 并且我确实运行了从 0.10.5 文件夹创建它的脚本) .

通过阅读,似乎我没有正确配置某些内容,或者我的覆盖忽略了中间件链中的 skipper。这也可能是配置文件不兼容的问题,因为我的真实应用程序的初始版本是在早期版本的 Sails 中开发的。

以下是我完整应用中 config/http.js 的内容:

/**
 * Configure advanced options for the Express server inside of Sails.
 */
module.exports.http = {
    bodyParser: function() {
        return require('body-parser')({limit: '900mb'});
    },
    customMiddleware: function(app) {

        var bodyParser = require('body-parser');
        var expressJwt = require('../libs/express-jwt');
        var experssJwtConfig = require('./jwt.js').jwt;

        app.use(function(req, res, next) {
            res.setHeader("Access-Control-Allow-Origin", "*");
            next();
        });

        app.use('/api', expressJwt({secret: experssJwtConfig.secret}));

        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded());


        if(process.env.NODE_ENV == 'development') {
            // just for local/development - serve static files
            var express = require('express');
            app.use('/custom1', express.static('D:/Temp/custom1/'));
            app.use('', express.static(process.cwd() + '/assets/'));
        }

    }
};

/**
 * HTTP Flat-File Cache
 */
module.exports.cache = {
    // The number of seconds to cache files being served from disk
    // (only works in production mode)
    maxAge: 31557600000
};

想到了什么?有没有办法调试并查看为什么我在请求对象中没有 file 函数?也许我应该以某种方式更新/升级配置文件?

【问题讨论】:

    标签: javascript node.js sails.js


    【解决方案1】:

    因此,事实证明这是一件简单的事情——sails(大约 10 版)使用 skipper 作为正文解析器。 Skipper 包含上传文件所需的功能。在上面,指定 bodyParser 会覆盖它,因此,我没有得到 file 函数和其他内置的船长功能。

    现在我必须重新使用 skipper(这将需要一些彻底的测试以确保没有中断)或包含其他中间件以促进文件上传...(任何 cmets 吗?)

    【讨论】:

    • 是的,使用自定义中间件作为正文解析器不仅会覆盖您的船长配置,还会覆盖所有其他中间件 Sails 在内部使用。我建议您保留sails 默认值,因为它们与应用程序耦合,然后慢慢地重新做整个应用程序,将sails 作为依赖项。
    • @dinchev - 感谢您的评论。我不确定我是否在关注你。 “重做应用程序并放弃帆”是什么意思?你建议停止使用它?
    • 另一个一般性问题:在sails.js 中——如果我使用skipper,我应该担心在自定义中间件中包含app.use(bodyParser.json());app.use(bodyParser.urlencoded());,还是那是多余的并且可以省略?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2017-12-03
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2015-02-20
    • 2012-11-28
    相关资源
    最近更新 更多