我开始深入研究node.js并且正在使用termianl。我正在使用GET
节点包https://www.npmjs.com/package/got
got
个请求
以下是我在浏览器中使用jquery
并在终端中使用got
的代码。
jQuery代码
$.get('https://raw.githubusercontent.com/notwaldorf/emoji-translate/master/bower_components/emojilib/emojis.json', function (data) {
var showEmoji = JSON.parse(data)
console.log(showEmoji.grinning.char);
})
按照我的预期在broswer的控制台中显示 - 一切都很好。
然后,当我在节点环境中编写等效代码时,不会显示任何内容。
Node.js代码
var got = require("got");
var url = 'https://raw.githubusercontent.com/notwaldorf/emoji-translate/master/bower_components/emojilib/emojis.json'
got(url).then(function(data){
var showEmoji = JSON.parse(data)
console.log(showEmoji.grinning.char);
});
据我所知,节点确实识别这些表情符号 - 见截图
任何人都可以解释为什么结果不一样吗?我错过了一些简单而明显的东西吗?
问题似乎与表情符号无关,好像我尝试将回调funxtion中的代码更改为以下内容,节点中仍然没有显示任何内容,但是在浏览器控制台中显示了一个数组。
console.log(showEmoji.grinning.keywords);
答案 0 :(得分:3)
问题是data
不是字符串,它是描述HTTP请求的富对象。此代码有效:
var got = require("got");
var url = 'https://raw.githubusercontent.com/notwaldorf/emoji-translate/master/bower_components/emojilib/emojis.json'
got(url).then(function(data){
var showEmoji = JSON.parse(data.body);
console.log(showEmoji.grinning.char);
});
...但你真的应该在你的承诺中加入.catch( ... )
来电,在发生这种事情时提醒你。 (还有一个共同的回调.done()
,但来自got
的承诺似乎不支持它。)
它不起作用的原因是JSON.parse
函数失败了 - 但是Node没有告诉你的原因是.then()
回调中的异常没有显示给用户。当您调用.catch()
时,它们会被存储并传递到.done()
回调或抛出。一般情况下,如果没有.then()
现有某处,就不应该使用.catch()
,否则这类事情会继续发生。
如果不需要所有这些显式处理,那将是可爱的但是使用promise库是不可能的。也许本土的承诺将来会允许它。