javascript - 中间件出现问题,无法发布到/api/upload

标签 javascript node.js typescript

我正在开发一个小型导入系统。用户从前端上传文件,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/

相关文章:

javascript - 将 JSON 对象重新映射到其他 JSON 结构

javascript - 在 typescript 或流程中声明 "promisifier"函数的类型

javascript - 如何使在文本字段中输入的值出现在 HTML 句子中

javascript - 'if condition' 与 'console.log' 内部相等性检查之间的区别

javascript - Tablesorter 过滤器函数扭曲表结果

javascript - 如何在循环中对一堆查询进行排序?

node.js - 带有 ids 数组的 mongoose findOneAndUpdate 回调

css - 如何使用 PrimeNG 删除 Accordion 面板标题上的箭头图标?

json - 如何为 Angular 6 中的下拉功能迭代多嵌套 JSON 对象?

javascript - 有条件不给出预期答案