【问题标题】:How to obtain Json data from different site如何从不同站点获取 Json 数据
【发布时间】:2021-12-01 12:07:12
【问题描述】:

所以,假设我有 /api/cat/fact.js 目录。
我想从catfact.ninja获取JSON数据

问题是,我不能使用 require()request() 包,因为如果我使用 require,它会说 Couldnt Found Module...,如果我使用 request 一个,而不是返回您可以在 @987654322 中看到的 JSON 数据@,它返回关于 api 的 JSON,例如 hostnameport,这是我不需要的

/API/api/cat/fact.js:

const express = require('express');
const app = express.Router();
const request = require('request')

app.use('', (req, res) => {
const src = 'https://catfact.ninja/fact';
  const facts = request({
        uri: src,
        hostname: 'catfact.ninja',
        port: 443, 
    path: '/fact',
    method: 'POST',
        json: 'fact'
    }, (error, response, body) => {
        if (error) console.log(error)
    console.log(body, '\n\n' + response.fact)
    })
        console.log(facts);
        return res.jsonp(facts)
})

module.exports = app;

【问题讨论】:

  • 嗖嗖嗖嗖
  • 你的代码在哪里?
  • 等等,让我明白
  • 你明白了
  • 输出了什么?

标签: javascript node.js api express


【解决方案1】:

您在错误的位置返回 JSON。它应该在回调函数内部返回。

解决办法如下:

const express = require('express');
const request = require('request-promise')

const app = express();

app.use('', async (req, res) => {
  const src = 'https://catfact.ninja/fact';

  try {
    const response = await request({
      uri: src,
      port: 443, 
      method: 'GET',
      json: true
    })

    return res.jsonp(response)
  } catch (err) {
    return res.jsonp(err)
  }
})

function startServer() {
  const port = 3000

  app.listen(port, () => {
    console.info('Server is up on port ' + port)
  })

  app.on('error', (err) => {
    console.error(err)
    process.exit(1)
  })
}
startServer()

提示:我建议使用request-promise npm 包而不是request 包,因为它提供了async-await 方法,更简洁。否则,您可以继续使用回调函数作为第二个request() 函数参数。

【讨论】:

  • 谢谢!但我不会使用 startServer() 函数,因为我的 index.js 上已经有 1
  • 你好,只是问一下,为什么我得到了同样的东西?可以查看My APi Site查看。
  • 像我一样输入options参数应该没问题。如果您使用 async-await 方法,我的解决方案中的 response 对象会为您提供正文,否则如果您使用 request 包中的回调函数,则正文包含在您的 body 参数中,您应该在其中返回 JSON回调函数,而 notrequest() 函数之后。
  • 啊是啊,我忘了把包从request改成request-promise.w.
  • 记得标记答案,以便其他人知道它对您有帮助。
猜你喜欢
  • 1970-01-01
  • 2014-07-21
  • 2020-08-02
  • 2014-04-16
  • 2012-11-13
  • 2016-01-02
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
相关资源
最近更新 更多