Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在express router.get中返回正文中的json数据?_Javascript_Node.js_Api_Express_Fetch - Fatal编程技术网

Javascript 如何在express router.get中返回正文中的json数据?

Javascript 如何在express router.get中返回正文中的json数据?,javascript,node.js,api,express,fetch,Javascript,Node.js,Api,Express,Fetch,我试图使用express创建一个端点,这样我就可以从api中检索数据,并在主体中返回json数据 我们从一个返回json数据数组的RESTAPI获取数据。我希望使用express router.get在前端显示json格式,这样我就可以访问端点并获取数据。以下是我到目前为止的情况: "use strict"; const express = require("express"); const path = require("path")

我试图使用express创建一个端点,这样我就可以从api中检索数据,并在主体中返回json数据

我们从一个返回json数据数组的RESTAPI获取数据。我希望使用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;
});
当我们访问路由器时,下面的代码返回节点响应中的数据,但它显示了,我需要在前端解决它

有人能告诉我在什么地方工作吗


谢谢,

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

"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
返回的承诺解析为
未定义的
,因为您试图在承诺链之外返回


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

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

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

这是什么<代码>等待数据你用它做什么?这是从reed.co.uk API返回的数据我知道,但为什么
等待
在它前面?这不是承诺吗?我很惊讶
res.end工作,它是一个函数,所以它是
res.end(…)