我有一个sails.js应用程序,我现在正在维护,但是由不同的开发人员编写。我对风帆不太熟悉,并且难以实现文件上传。
一般情况下,我了解sails使用skipper处理文件上传,并且上传API可通过skipper获得。此外,我设法创建了一个新的裸骨应用程序,在其中我可以按照文档中提供的示例进行文件上载。
在我的完整应用程序中,http配置中有一些自定义。在我的控制器中,req.file
为undefined
(与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
函数?也许我应该以某种方式更新/升级配置文件?
答案 0 :(得分:0)
所以,事实证明这是一个简单的问题 - 风帆(大约10版本)使用船长作为身体解析器。 Skipper包含上传文件所需的功能。在上面,指定bodyParser
会覆盖此,因此,我没有获得file
函数和其他内置的skipper功能。
现在我必须要么回到使用船长(这将需要一些彻底的测试,以确保没有任何中断)或包括额外的中间件,以方便文件上传...(任何评论?)