dul*_*lan 3 upload promise sails.js
我使用sails.js作为我的后端与bluebird承诺,我尝试使用req.file.upload上传文件,回调方式工作正常,文件上传:
req.file('file').upload({
maxBytes: 2000000,
dirname: 'uploadFolder'
}, function (err, files) {
if (err) {
return res.serverError(err);
}
return res.ok();
}
Run Code Online (Sandbox Code Playgroud)
但承诺的方式不是:
var Promise = require('bluebird');
var fileUploader = Promise.promisify(req.file('file').upload);
fileUploader({
maxBytes: 2000000,
dirname: currentUploadFolder
}).then(function(files) {
console.log(files);
return Promise.resolve(files);
}).catch(function(err) {
console.log(err);
return Promise.reject(err);
});
Run Code Online (Sandbox Code Playgroud)
文件没有上传,控制台一直在抱怨:
data: app.js:1800 - [TypeError: Cannot read property 'length' of undefined]
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
这种情况很独特,你不能promisify在这里使用.您需要创建新的Promise并将其返回.
return new Promise(function(resolve, reject) {
req.file('file').upload({
maxBytes: 2000000,
dirname: 'uploadFolder'
}, function (error, files) {
return error ? reject(error) : resolve(files);
}
});
Run Code Online (Sandbox Code Playgroud)
您可以将它移动到helper\services\whatever,并得到类似的东西
// api/services/UploadService.js
module.exports = {
uploadFile: function(req) {
return new Promise(function(resolve, reject) {
req.file('file').upload({
maxBytes: 2000000,
dirname: 'uploadFolder'
}, function (error, files) {
return error ? reject(error) : resolve(files);
}
});
}
};
// api/controllers/AnyController.js
module.exports = {
upload: function(req, res) {
UploadService
.uploadFile(req)
.then(res.ok)
.catch(res.negotiate);
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |