You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS中getDataFromDir函数返回undefined问题求助

问题分析与修复方案

核心问题:getDataFromDir 函数返回 undefined 的原因

你的 getDataFromDir 是 async 函数,但内部调用 fsp.readdir().then(...) 后没有返回这条 Promise 链,导致函数默认返回 undefined。后续 await getDataFromDir(...) 拿到的是 undefined,自然无法调用 .then() 方法。

分步修复

1. 补全缺失的模块导入

代码中使用了 http、path、fs.promises 但未导入,先补上:

const http = require('http');
const path = require('path');
const fsp = require('fs').promises;

2. 修复 getDataFromDir 的返回值

有两种简洁的修复方式:

方式一:返回原 Promise 链

直接在 fsp.readdir 前添加 return,让函数返回异步操作的 Promise:

async function getDataFromDir(fileName){
    return fsp
        .readdir(path.join(fileName))
        .then(async (indir) => {
            const list = []
            for (const item of indir) {
                // 如果不需要文件状态信息,可删除此行
                const src = await fsp.stat(path.join(fileName, item))
                list.push(item)
            }
            return list;
        })
}
方式二:用 async/await 完全重构(更易读)

避免混合使用 .then() 和 await,统一用 async/await 写法:

async function getDataFromDir(fileName){
    const indir = await fsp.readdir(path.join(fileName));
    const list = [];
    for (const item of indir) {
        // 若仅需文件名,可删除 stat 调用以提升性能
        // const src = await fsp.stat(path.join(fileName, item));
        list.push(item);
    }
    return list;
}

3. 修复服务器逻辑

await getDataFromDir(...) 已经直接拿到结果(不是 Promise),无需再调用 .then(),同时补充错误处理和响应返回:

const server = http.createServer(async (req, res) => {
    try {
        const result = await getDataFromDir(__dirname);
        console.log(result);
        // 给客户端返回响应,避免请求挂起
        res.end(JSON.stringify(result));
    } catch (err) {
        // 捕获异步错误,防止服务器崩溃
        console.error(err);
        res.writeHead(500);
        res.end('Server Error');
    }
});

// 启动服务器(原代码遗漏)
server.listen(port, host, () => {
    console.log(`Server running at http://${host}:${port}/`);
});

额外说明

  • async 函数若没有显式返回值,会默认返回 Promise.resolve(undefined);只有返回 Promise 或通过 await 等待异步操作,才能让函数返回预期的异步结果。
  • 代码中 const src = await fsp.stat(...) 变量未被使用,若仅需获取目录下的文件名,可删除该调用以节省性能;若需判断文件/目录类型,可使用 src.isFile()/src.isDirectory() 处理。

内容的提问来源于stack exchange,提问作者Irina Vinter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:23:11