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

Node.js异步操作下写入文件内容为undefined的问题排查与解决

解决Node.js异步请求中写入文件出现undefined的问题

嘿,我之前也碰到过一模一样的问题!你这里的核心问题其实和异步关系不大,而是响应体body的格式不对——看起来console.log(body)能输出内容,但那只是JSON字符串的打印效果,实际上它并不是一个JavaScript对象,所以直接访问body.notification_key自然会得到undefined。

给你两个简单的解决办法:

方法一:手动解析JSON字符串

在使用body的属性之前,先用JSON.parse()把它转换成JS对象:

request(options, function (error, response, body){
  if(!error){
    // 把JSON字符串解析为可操作的JS对象
    const parsedBody = JSON.parse(body);
    console.log(parsedBody); // 现在能正确看到对象结构了
    fs.writeFile("E:/FirebaseNotif/testfile", parsedBody.notification_key, function(err) {
      if(err) {
        return console.log(err);
      }
      console.log("The file was saved!");
    });
  }else{
    console.log('请求失败了:', error);
  }
});

方法二:让request自动解析JSON

更省事的方式是在请求选项里加上json: true,这样request会自动帮你把响应体解析成JS对象,不用手动处理:

// 先修改你的options配置
const options = {
  url: "你的接口地址", // 替换成实际地址
  method: "GET", // 或者你的请求方法
  // 其他配置...
  json: true // 关键:开启自动JSON解析
};

request(options, function (error, response, body){
  if(!error){
    console.log(body); // 这里已经是JS对象了
    fs.writeFile("E:/FirebaseNotif/testfile", body.notification_key, function(err) {
      if(err) {
        return console.log(err);
      }
      console.log("The file was saved!");
    });
  }else{
    console.log('请求失败了:', error);
  }
});

另外可以先验证一下:在console.log(body)后面加一句console.log(typeof body),如果输出是string,那就是我说的JSON字符串问题;如果是object,那再检查下notification_key的拼写是不是和接口返回的完全一致(比如有没有大小写错误、下划线是不是写成驼峰了)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:54:41