端点呼叫挂起,不返回任何响应或错误

时间:2019-08-08 14:02:54

标签: javascript

我有这个功能:

app.get("/files", async (req, res) => {
    const usedEndpoints = {};
    const getFilesFromLoc = loc => (
        new Promise((resolve, reject) => fs.readdir(loc, (err, files) => {
            if (err) {
              console.error("Could not list the directory.", err);
              process.exit(1);
            }

            Promise.all(files.map(file => {
                const newPath = path.join(loc, file);
                return new Promise((resolve, reject) =>fs.stat(newPath, (err, stat) => {
                    if (err) {
                      console.error("Error stating file.", err);
                      reject();
                    }
                    console.log(newPath)
                    if (stat.isFile()) {
                        const extension =  path.extname(newPath);

                        if (extension === ".js" || extension === ".jsx") {
                            fs.readFile(newPath, "utf8", (err, string) => {
                                if (err) {
                                  console.error("Error reading file.", err);
                                  reject();
                                }
                                allEndpoints.forEach(ep => {
                                    if(string.includes(ep)) usedEndpoints[ep] = true;
                                });
                                resolve(true);
                            });
                        }
                    } else if (stat.isDirectory()) {
                        getFilesFromLoc(newPath)
                        .then(() => resolve(true));
                    } else {
                        reject();
                    }
                }))
            })).then(() => resolve(true))
        }))
    )
    getFilesFromLoc("src/server").then(() => {console.log("request finished");res.send(filesString)})
});

基本上,这是一个仅会使用一次的功能,对我来说,它是通过项目文件使用的端点列表。只有一个问题。该项目包含1000多个文件。如果我将loc的初始getFilesFromLoc设置为一个不包含太多文件的位置,则可以正常工作,并完成请求。否则,它会在几秒钟后停止。不抛出任何错误,也没有响应。有什么(甚至丑陋的)解决方案吗?

0 个答案:

没有答案