【问题标题】:How can I return json data in body in express router.get?如何在 express router.get 中返回正文中的 json 数据?
【发布时间】:2021-02-09 13:09:10
【问题描述】:

我正在尝试使用 express 创建一个端点,以便我可以从 api 检索数据并在正文中返回 json 数据。

我们从一个返回 json 数据数组的 rest api 获取数据。我想要的是使用 express router.get 来显示前端格式化的 json,这样我就可以访问端点并获取数据。这是我目前所拥有的:

"use strict";
const express = require("express");
const path = require("path");
const serverless = require("serverless-http");
const app = express();
const bodyParser = require("body-parser");
const fetch = require("node-fetch");
var async = require("express-async-await");

const router = express.Router();
router.get("/", async function(req, res, next) {
  var requestOptions = {
    method: "POST",
    headers: {
      Accept: "application/json",
      Authorization:
        "Basic *********",
      "Access-Control-Allow-Origin": "*"
    },
    redirect: "follow"
  };

  async function getApi() {
    try {
      const response = fetch(
        "http://www.reed.co.uk/api/1.0/search?employerId=*******",
        requestOptions
      )
        .then(res => {
          return res.json();
        })
        .then(json => {
          return json;
        });
      return response;
    } catch (error) {
      console.log(error);
    }
  }

  const ooIprocessData = async () => {
    const data = await getApi();
    const ooiResponseData = await data;
    return ooiResponseData;
  };
  ooIprocessData();
  res.end;
});

下面的代码在我们访问路由器时返回节点响应中的数据,但它显示了,我需要在前端解决它。

谁能指出我在正确的地方进行这项工作?

谢谢,

【问题讨论】:

  • 这是什么? await data你用它做什么?
  • 这是reed.co.uk api返回的数据
  • 我知道但为什么await在它前面?这不是一个承诺?
  • 我很惊讶res.end; 工作了,它是一个函数,所以它是res.end(...)

标签: javascript node.js api express fetch


【解决方案1】:

Response 有一个名为json 的函数来发送回 JSON 数据。您还可以选择使用Response.prototype.status 提供有关它是否有效的元数据。例如,

res.status(200).json({status: 1, msg: 'Fetched successfully'});

【讨论】:

    【解决方案2】:

    这里有一些不必要的步骤。您也可以将您的功能移到路由器功能之外。

    "use strict";
    const express = require("express");
    const path = require("path");
    const serverless = require("serverless-http");
    const app = express();
    const bodyParser = require("body-parser");
    const fetch = require("node-fetch");
    var async = require("express-async-await");
    
    const router = express.Router();
    
    router.get("/", async function(req, res) {
      var requestOptions = {
        method: "POST",
        headers: {
          Accept: "application/json",
          Authorization: "Basic *********",
          "Access-Control-Allow-Origin": "*"
        },
        redirect: "follow"
      };
      try {
        let result = await getApi(requestOptions);
        res.status(200).json(result);
      } catch (err) {
        return res.status(500).json(err);
      }
    });
    
    function getApi(requestOptions) {
      return fetch(
        "http://www.reed.co.uk/api/1.0/search?employerId=*******",
        requestOptions
      ).then(res => {
        return res.json();
      });
    }
    

    您的问题还在于 getApi 返回一个解析为 undefined 的承诺,因为您尝试在承诺链之外返回

    在有用的地方使用async / await。不是它可能工作的地方

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2017-12-07
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      相关资源
      最近更新 更多