首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自定义中间件实现Sails.js (0.10.5)文件上传

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

Stack Overflow用户
提问于 2016-05-26 17:14:22
回答 1查看 124关注 0票数 0

我有一个sails.js应用程序,我现在正在维护它,但它是由不同的开发人员编写的。我不是很精通sails,并且在实现文件上传方面有困难。

一般来说,我知道sails使用skipper处理文件上传,上传API可以通过skipper获得。此外,我设法创建了一个新的基本应用程序,在其中我能够按照文档中提供的示例进行文件上传。

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

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

稍微读一下,似乎要么是我的配置不正确,要么是我的覆盖在中间件链中省略了skipper。这也可能是配置文件不兼容的问题,因为我的实际应用程序的初始版本是在sails的早期版本中开发的。

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

代码语言:javascript
复制
/**
 * 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
};

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

EN

回答 1

Stack Overflow用户

发布于 2016-05-27 15:26:13

因此,事实证明这是一个简单的问题-- sails (在版本10左右)使用skipper作为正文解析器。Skipper包含上传文件所需的功能。在上面的代码中,指定bodyParser会覆盖这一点,因此,我没有得到file函数和其他内置的skipper功能。

现在我不得不重新使用skipper (这将需要一些彻底的测试以确保没有中断),或者包含额外的中间件来促进文件上传……(对此有何评论?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37456481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档