我正在使用Express,我需要创建一些用于验证的中间件,
我喜欢
代码:
app.use(‘/upload', fromData)
app.use(‘/upload', function firstUpload(req, res, next) {
return fileHandler(req, res, next)
.then((status) => {
res.statusCode = 201;
res.end(status)
}).catch((err) => {
return next(new appError(500, err));
});
});
现在我使用来自Handler的另一个函数
function formData(req) {
return new Promise((resolve, reject) => {
const form = new formidable.IncomingForm();
form.maxFileSize = 100 * 1024 * 1024;
form.keepExtensions = true;
form.multiEntry = true;
form.parse(req, (err, fields, files) => {
const filesInfo = Object.keys(files).map((key) => {
const file = files[key];
const filePath = file.path;
const fileExt = path.extname(file.name);
const fileName = path.basename(file.name, fileExt);
return {filePath, fileExt};
});
}
Resolve(filesInfo)
}
我需要从formData函数返回数据Resolve(filesInfo)
到
fileHandler
函数,我该怎么做? fileHandler函数需要获取filesInfo
答案 0 :(得分:2)
您在这里不需要承诺。中间件使用next
函数作为callback
转到下一个处理程序。在此之前,您应该将来自中间件的数据放入req对象。之后,您可以从req. filesInfo
获取。
function formData(req, res, next) {
const form = new formidable.IncomingForm();
form.maxFileSize = 100 * 1024 * 1024;
form.keepExtensions = true;
form.multiEntry = true;
form.parse(req, (err, fields, files) => {
if (err || fields.length === 0) {
res.status(500).json({ message: 'you are done' }); // <- this is where you stop the request with an error.
}
const filesInfo = Object.keys(files).map((key) => {
const file = files[key];
const filePath = file.path;
const fileExt = path.extname(file.name);
const fileName = path.basename(file.name, fileExt);
return {filePath, fileExt};
});
req.filesInfo = filesInfo;
next();
}
}
function fileHandler(req, res) {
console.log(req.filesInfo); /* <- you can also get the filesInfo here */
return Promise.resolve({});
}
app.use(‘/upload', fromData)
app.use(‘/upload', function(req, res, next) {
// console.log(req.filesInfo); => You can get your filesInfo here and do whatever you want
return fileHandler(req, res, next)
.then((status) => {
res.statusCode = 201;
res.end(status)
}).catch((err) => {
return next(new appError(500, err));
});
});