Javascript NodeJS读取多个文件并返回快速响应

Javascript NodeJS读取多个文件并返回快速响应,javascript,node.js,Javascript,Node.js,我正在检索一条路由,然后从一个目录中获取我需要的所有json文件 我需要按键值将所有这些json文件合并到一个json对象中,其中键是文件名,值是文件内容 我需要使其异步,因为如果不是,响应将在文件系统完成其工作之前发送,并且我将有一个空的json对象响应 我尝试使用了Promise.all和wait: app.route("/pull").get(async function(req, res) { fs.readdir(path, async (error, files) =

我正在检索一条路由,然后从一个目录中获取我需要的所有json文件

我需要按键值将所有这些json文件合并到一个json对象中,其中键是文件名,值是文件内容

我需要使其异步,因为如果不是,响应将在文件系统完成其工作之前发送,并且我将有一个空的json对象响应

我尝试使用了
Promise.all
wait

  app.route("/pull").get(async function(req, res) {
      fs.readdir(path, async (error, files) => {      
        if (error) {
          console.log("Could not load files. ", error.message);
          res.sendStatus(500);
        }
        else {

          let json = {};

          json = await Promise.all(
              files.map(async (fileName, index) => {

                return await fs.readFile(path + fileName, 'utf-8', (err, content) => {

                    return {key: fileName, value : JSON.parse(content)}

                });

              })

          );

          res.status(200).json(json);
        }
    });
  });

我得到了
[null]
作为响应,我错过了什么?

路由处理程序没有等待
fs.readdir
完成回调。您需要像这样承诺
readdir

import fs from 'fs';
import {promisify} from 'util';
const readdir = promisify(fs.readdir);
然后在处理程序中:

{error, files} = await readdir(...)
...

旁注:使用裸异步函数作为路由处理程序不是一个好主意,您使用的是
async/await
,同时使用
callback
也没有意义。只需删除回调,您将直接在变量中得到响应。