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
相关产品推荐
相关产品推荐

