Node.js 如何在Node/Express中的控制器函数内调用第三方API?

Node.js 如何在Node/Express中的控制器函数内调用第三方API?,node.js,express,Node.js,Express,只是在玩我的第一个Node/Express应用程序 我想做的是: 在向/wordsearch(POST)提交表单时,应使用提交的关键字调用WikipediaAPI。在从Wikipedia返回响应后,我想在视图中将其呈现给用户。基本的东西。 但我对如何在NODE/JS中安排这些内容缺乏一些基本的了解。我最近读过关于回调和承诺的书,从理论上理解了这些概念,但在试图将其转化为代码时,似乎把事情搞混了。如果有人能说明我错在哪里,我将不胜感激 方法1: 这是提交表单时遇到的控制器函数: exports.s

只是在玩我的第一个Node/Express应用程序

我想做的是:

在向
/wordsearch
(POST)提交表单时,应使用提交的关键字调用WikipediaAPI。在从Wikipedia返回响应后,我想在视图中将其呈现给用户。基本的东西。 但我对如何在NODE/JS中安排这些内容缺乏一些基本的了解。我最近读过关于回调和承诺的书,从理论上理解了这些概念,但在试图将其转化为代码时,似乎把事情搞混了。如果有人能说明我错在哪里,我将不胜感激

方法1:

这是提交表单时遇到的控制器函数:

exports.searchSources = (req, res) => {
  const term = req.body.searchTerm

  const url = `https://en.wikipedia.org/w/api.php?action=opensearch&search=${term}&limit=10&namespace=0&format=json`
  const client = new Client()

  client.get(url, function (data, response) {
    //this causes the error
    res.json(data)
  })  
}

=> Error: Can't set headers after they are sent.
我知道,错误源于试图设置两次响应头,或者当响应已经处于某种状态时,但我不知道在这里会发生什么。我如何等待Wiki请求的结果并使其在控制器函数中可用,以便能够呈现它

方法2:

同样,控制器功能:

exports.searchSources = (req, res) => {
  const term = req.body.searchTerm

  const url = `https://en.wikipedia.org/w/api.php?action=opensearch&search=${term}&limit=10&namespace=0&format=json`
  const client = new Client()

  const data = client.get(url, function (data, response) {
    return data
  })

  res.json(data)
}

=> TypeError: Converting circular structure to JSON at JSON.stringify ()

这只是一次尝试,使来自Wiki的响应在controller函数中可用

您使用哪个模块发送请求?这一个:
const Client=require('node-rest-Client')。Client