sails.js req.file.upload 蓝鸟承诺
sails.js req.file.upload with bluebird promise
我使用 sails.js 作为 bluebird promise 的后端,我尝试使用 req.file.upload 上传文件,回调方式工作正常并且文件被上传:
req.file('file').upload({
maxBytes: 2000000,
dirname: 'uploadFolder'
}, function (err, files) {
if (err) {
return res.serverError(err);
}
return res.ok();
}
但 promise 方式没有:
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);
});
文件没有上传,控制台一直报错:
data: app.js:1800 - [TypeError: Cannot read property 'length' of undefined]
有什么想法吗?
这种情况是独一无二的,您不能在此处使用 promisify
。您需要创建新的 Promise 并 return 它。
return new Promise(function(resolve, reject) {
req.file('file').upload({
maxBytes: 2000000,
dirname: 'uploadFolder'
}, function (error, files) {
return error ? reject(error) : resolve(files);
}
});
你可以把它移到 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);
}
};
我使用 sails.js 作为 bluebird promise 的后端,我尝试使用 req.file.upload 上传文件,回调方式工作正常并且文件被上传:
req.file('file').upload({
maxBytes: 2000000,
dirname: 'uploadFolder'
}, function (err, files) {
if (err) {
return res.serverError(err);
}
return res.ok();
}
但 promise 方式没有:
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);
});
文件没有上传,控制台一直报错:
data: app.js:1800 - [TypeError: Cannot read property 'length' of undefined]
有什么想法吗?
这种情况是独一无二的,您不能在此处使用 promisify
。您需要创建新的 Promise 并 return 它。
return new Promise(function(resolve, reject) {
req.file('file').upload({
maxBytes: 2000000,
dirname: 'uploadFolder'
}, function (error, files) {
return error ? reject(error) : resolve(files);
}
});
你可以把它移到 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);
}
};