Node.js中向JSON响应追加内容报错:DISPLAY未定义
问题分析与解决方案
看起来你遇到了两个实打实的问题:DISPLAY未定义的引用错误,以及没法给fbResponse追加内容。我来帮你逐个捋清楚怎么解决:
1. 搞定ReferenceError: DISPLAY is not defined
这个错误逻辑很直白——你代码里用到了DISPLAY,但它压根没被声明或初始化过。分两种情况处理:
- 如果
DISPLAY是你自己要创建的自定义对象,那在使用前先声明它:// 在用到DISPLAY的代码前加这行,先把对象建出来 var DISPLAY = {}; - 如果
DISPLAY是某个全局对象(比如浏览器里的DOM元素、或者第三方库提供的对象),那得确认:- 对应的库有没有正确引入
- 如果是DOM元素,别直接写
DISPLAY,得用document.getElementById('DISPLAY')来获取这个元素
2. 解决无法向fbResponse追加内容的问题
fbResponse是JSON.parse(body)解析出来的对象,正常情况下普通JS对象是可以随便加属性的。可能的问题点和解决办法:
- 拼写错误:你代码里的
console.log("Got a response: ", fbRespo...看起来截断了,会不会是打印的时候把fbResponse拼错了(少写了nse)?要是这样的话,其实内容已经追加成功了,只是你打印错变量没看到而已。 - 追加方式不对:得用正确的语法给对象加属性,比如:
// 给fbResponse加新属性 fbResponse.myCustomInfo = "我是追加的自定义内容"; // 如果fbResponse是数组,就用push方法 // fbResponse.push("新增的数组元素"); - 极端情况:对象被冻结:极少数情况下,
JSON.parse返回的对象可能被冻结(比如某些特殊环境配置),这时候可以先复制到新对象再修改:var fbResponse = {...JSON.parse(body)}; // 用扩展运算符复制原对象 fbResponse.newField = "要追加的内容";
修改后的参考代码
这里给你整合了修复后的代码示例:
readCoin: function(myDB, url, connection) { console.log("URL: ", url); request(url, (error, response, body)=> { if (!error && response.statusCode === 200) { // 先初始化DISPLAY对象(如果之前没定义的话) var DISPLAY = {}; var fbResponse = JSON.parse(body); // 向fbResponse追加自定义内容 fbResponse.extraData = "来自业务逻辑的额外信息"; console.log("带追加内容的响应: ", fbResponse); // 把内容加到DISPLAY里 DISPLAY.coinData = fbResponse; console.log("DISPLAY对象的内容: ", DISPLAY); } else { console.error("请求出错了: ", error || `状态码${response.statusCode}`); } }); }
内容的提问来源于stack exchange,提问作者user2130951
相关产品推荐
相关产品推荐

