我正在开发一个小型导入系统。用户从前端上传文件,Nodejs 处理该文件并解析 csv 中的数据并插入到数据库中。
我有不同的中间件来处理请求。我想首先授权用户,其次上传数据并将数据提取到 req.data,最后我想发送完成请求的响应。
app.post('/api/upload', auth, upload.single("file"), (req, res, next) =>{
let steam = fs.ReadStream(req.file.path);
csvtojson()
.fromStream(steam)
.then( function(data){
req.data = data;
});
next();
}, doImport);
这些是中间件:
function auth(req, res, next) {
console.log("Authorizing");
next();
}
function doImport(req, res, next){
console.log("importing Data");
console.log(req.data);
res.send(req.data);
}
错误是:
[]
空数组
最佳答案
您当前正在尝试调用next()
之前req.data
已填充,因此您的中间件正在发送空数组。请记住,如果您需要确定某行在异步操作完成后运行,则需要将该行放在适当的位置(在本例中为 .then()
block 内):
app.post('/api/upload', auth, upload.single("file"), (req, res, next) =>{
let steam = fs.ReadStream(req.file.path);
csvtojson()
.fromStream(steam)
.then( function(data){
req.data = data;
next() //
}).catch(err => next(err));
}, doImport);
如图所示,您还应该处理错误,因为如果不这样做并且抛出错误,您的请求将超时(不会调用 next()
)。
关于javascript - 中间件出现问题,无法发布到/api/upload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57448487/