我有一个sails.js应用程序,我现在正在维护它,但它是由不同的开发人员编写的。我不是很精通sails,并且在实现文件上传方面有困难。
一般来说,我知道sails使用skipper处理文件上传,上传API可以通过skipper获得。此外,我设法创建了一个新的基本应用程序,在其中我能够按照文档中提供的示例进行文件上传。
不过,在我的完整应用程序中,http配置中有一些定制。在我的控制器中,req.file是undefined (和files一样)。
此外,比较完整应用程序和测试应用程序的config/http.js,结构也不同。AFAIK,真实的和测试的应用程序都是0.10.5 (但在我的电脑上,全局sails是0.12.x,尽管在新的应用程序文件夹中我看到了sails 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
};有没有想到什么?有没有一种方法可以调试并了解为什么在request对象中没有file函数?也许我应该以某种方式更新/升级配置文件?
发布于 2016-05-27 15:26:13
因此,事实证明这是一个简单的问题-- sails (在版本10左右)使用skipper作为正文解析器。Skipper包含上传文件所需的功能。在上面的代码中,指定bodyParser会覆盖这一点,因此,我没有得到file函数和其他内置的skipper功能。
现在我不得不重新使用skipper (这将需要一些彻底的测试以确保没有中断),或者包含额外的中间件来促进文件上传……(对此有何评论?)
https://stackoverflow.com/questions/37456481
复制相似问题