Javascript 无法通过express JS中的res.json打印对象

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

我正在尝试构建一个API,通过它我可以获得JSON输出中的whois详细信息,如下所示

为此,我从npm(Link)安装了whois包。我尝试将字符串转换为对象,并以JSON格式打印,但我在web上没有得到任何输出,但我可以轻松地获得数据。你们能纠正我的错误吗

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,我们需要:

  • 调用函数被声明为异步
  • 被调用的函数正在返回一个承诺(否则就没有什么可等待的了)
  • 如果您的express处理程序定义为async,那么您现在也可以在此处使用Wait:

    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())