使用自定义中间件上传Sails.js(0.10.5)文件

时间:2016-05-26 09:14:22

标签: javascript node.js sails.js

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

一般情况下,我了解sails使用skipper处理文件上传,并且上传API可通过skipper获得。此外,我设法创建了一个新的裸骨应用程序,在其中我可以按照文档中提供的示例进行文件上载。

在我的完整应用程序中,http配置中有一些自定义。在我的控制器中,req.fileundefined(与files一样)。

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

从阅读中看,似乎我有一些配置不正确或我的覆盖从中间件链中省略了队长。这也可能是配置文件不兼容的问题,我的真实应用程序的初始版本是在早期版本的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函数?也许我应该以某种方式更新/升级配置文件?

1 个答案:

答案 0 :(得分:0)

所以,事实证明这是一个简单的问题 - 风帆(大约10版本)使用船长作为身体解析器。 Skipper包含上传文件所需的功能。在上面,指定bodyParser会覆盖此,因此,我没有获得file函数和其他内置的skipper功能。

现在我必须要么回到使用船长(这将需要一些彻底的测试,以确保没有任何中断)或包括额外的中间件,以方便文件上传...(任何评论?)