Javascript 无法通过express JS中的res.json打印对象
我正在尝试构建一个API,通过它我可以获得JSON输出中的whois详细信息,如下所示 为此,我从npm(Link)安装了whois包。我尝试将字符串转换为对象,并以JSON格式打印,但我在web上没有得到任何输出,但我可以轻松地获得数据。你们能纠正我的错误吗Javascript 无法通过express JS中的res.json打印对象,javascript,node.js,express,whois,Javascript,Node.js,Express,Whois,我正在尝试构建一个API,通过它我可以获得JSON输出中的whois详细信息,如下所示 为此,我从npm(Link)安装了whois包。我尝试将字符串转换为对象,并以JSON格式打印,但我在web上没有得到任何输出,但我可以轻松地获得数据。你们能纠正我的错误吗 function whoisFunction() { var whois = require('whois') whois.lookup(url,async function(err, data) { try
function whoisFunction() {
var whois = require('whois')
whois.lookup(url,async function(err, data) {
try {
a = await data.split('\n')
}
catch (e) {
console.log(e)
return e
}
c=[]
for(i = 0; i < a.length; i++){
c.push(a[i])
}
await console.log(typeof (c))
console.log(c)
return a
})
}
// res.json({'Headers':+whoisFunction()})
res.status(200).json(whoisFunction())
函数whoisFunction(){
var whois=require('whois')
查找(url,异步函数(err,数据){
试一试{
a=等待数据。拆分('\n')
}
捕获(e){
控制台日志(e)
返回e
}
c=[]
对于(i=0;i
函数中似乎随机分布着异步和等待。
您应该意识到,这里唯一异步的是whois.lookup()
。
console.log不是异步的。Array.prototype.split不是异步的。回调(err,data)=>{…}
不是异步的
如果要使用回调模式,则需要在回调内部使用res.send()
(err, data) => {
res.send(data)
}
但是我们厌倦了回调模式,因为嵌套它们是多么的混乱。因此,我们转而使用承诺。如果您有回调,但希望使用承诺,那么可以将回调包装为承诺。您只需执行一次,并尽可能紧密地执行以下操作:
function promisifiedLookup(url){
return new Promise( (resolve, reject) => {
whois.lookup(url, function(err, data) {
if(err) reject(err)
else resolve(data)
})
})
}
因此,要使用async/await,我们需要:
res.status(200).json(await whoisFunction())
您的
whoisFunction
函数不会返回任何内容(您的匿名异步函数(err,data)
会返回,但不会返回任何内容),如果会返回,则必须是res.json也无法处理的承诺。检查是否有理由对str.split
和console.log
使用async/await?没有理由使用async/await,但它仅用于测试。console.log是为了知道我们是否可以在console中看到输出。我在这个``返回新承诺(解析,拒绝){^SyntaxError:Unexpected token{``你能帮我一下吗?``我不能在res.status(200.json)中使用wait(wait whoisFunction())删除wait后,我在我的网站上没有收到任何响应。您需要在那里等待,这意味着您需要使处理程序异步,或者使用.then()链(或者返回到使用回调。拾取毒药。)whoisFunction().then(data=>{res.status(200).json(data)})
为了使用await,父函数需要声明为异步的,因此,对于express处理程序,它可以是这样的:app.get(“/somewhere”,异步函数(req,res){…await…})
。请确保在那里使用async关键字。非常感谢,伙计。我刚刚解决了这个简单的问题:)这都是因为我没有在app.get(“/where”)之后放置async,它在测试时被错误地删除了
res.status(200).json(await whoisFunction())