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

Node.js API控制器中Async/Await返回未知错误排查求助

排查Node.js API控制器getAllHost接口Async/Await未知错误的思路

我来帮你一步步拆解这个接口的问题,结合你给出的代码片段,主要有这几个核心点需要排查:

  • 正则表达式转义错误导致匹配异常
    你代码里构建正则的部分:new RegExp('\b' + req.query.name),这里的\b在JavaScript字符串中是退格字符,而不是正则表达式里的单词边界。要在正则里表示单词边界,必须把\b转义成\\b,否则当req.query.name存在时,这个正则要么语法无效,要么匹配逻辑完全不符合预期,进而抛出异常。而你的catch块里console.l...还没写完,既没完整打印错误,也没把错误返回给客户端,自然只能看到“未知错误”。
    修复示例:

    let regexp = new RegExp(`\\b${req.query.name}`, 'i'); 
    query.name = {$regex: regexp}; 
    

    顺便把$options: 'i'直接写在RegExp的第二个参数里,代码更简洁。

  • Async函数未被调用,错误完全被“吞掉”
    你定义了async function sendRes(),但整个getAllHost函数里根本没有执行这个函数!也就是说你的异步查询逻辑压根没跑起来。就算你漏写了调用,sendRes内部的catch块也只做了半截的日志打印,没有通过res对象把错误信息返回给客户端,导致客户端收不到明确的错误提示,你也看不到具体的错误栈。
    正确的调用和错误处理方式:

    async function sendRes() {
      let hosts = [];
      try {
        hosts = await findAllHost();
        res.status(200).json({data: hosts}); // 别忘了返回成功结果
      } catch(err){
        console.error('获取主机列表失败:', err); // 完整打印错误栈
        res.status(500).json({error: '获取主机列表失败', details: err.message}); // 把错误返回给客户端
      }
    }
    // 调用async函数,同时处理它可能的未捕获错误
    sendRes().catch(err => console.error('sendRes未捕获错误:', err));
    
  • Mongoose查询的错误处理不完整
    Host.find(query)返回的是Mongoose的Query对象,虽然可以用await获取结果,但如果Mongoose存在数据库连接问题、查询语法错误(比如字段名写错),都会抛出异常。你原来的代码既没有把错误反馈给客户端,也没有完整记录错误信息,自然无法定位到底是数据库层面还是业务逻辑的问题。

  • 优化代码结构,减少嵌套冗余
    其实没必要把findAllHost拆成单独的嵌套函数,直接把查询逻辑写在主异步流程里会更清晰,也更容易排查问题:

    export async function getAllHost(req, res) { 
      try {
        let query = {}; 
        query.company = req.query?.companyId || res.locals.payload.companyId; 
        query.active = true; 
        if(req.query?.name) { 
          let regexp = new RegExp(`\\b${req.query.name}`, 'i'); 
          query.name = {$regex: regexp}; 
        } 
        const hosts = await Host.find(query);
        res.status(200).json({data: hosts});
      } catch(err) {
        console.error('获取主机列表错误:', err);
        res.status(500).json({error: '服务器内部错误', message: err.message});
      }
    }
    

内容的提问来源于stack exchange,提问作者relentless-coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:56:14