本地主机没有在我的 Node/Express/Axios 应用程序中发送任何数据

问题描述 投票:0回答:1

我正在使用 Express 开发一个全栈 Node 应用程序,并使用 Axios 来调用外部 API。我的 API 调用正在运行,但它似乎没有将任何数据发送回我的路由处理程序,并且我收到浏览器超时消息,然后收到消息:

“本地主机未发送任何数据 ERR_EMPTY_RESPONSE”

这是我的路线处理程序,routes/met_route.js:

'use strict';
import express from "express";
import metData from "../models/metData.js";

const router = express.Router();
router.get('/', metData.searchArt, (req, res) => {
    res.send(res.data)
})

export default router;

这是我的 API 调用代码,models/metData.js:

'use strict';
import axios from "axios";

const metAPI = {
   searchArt: function() {
      axios.get("https://collectionapi.metmuseum.org/public/collection/v1/objects/11")
         .then(response => {
            console.log(response.data)
         })
         .catch(error => console.error('error:', error));
   }
};

export default metAPI;

我的主server.js文件如下:

import express from "express";
import cors from "cors";
import homeRoute from "../routes/home_route.js";
import metRoute from '../routes/met_route.js';

const PORT = process.env.PORT || 5050;
const app = express();

app.use(cors());
app.use(express.json());

//routing
app.use("/", homeRoute);
app.use("/met", metRoute);

// start the express server
app.listen(PORT, ()=> {
    console.log(`server listening on port ${PORT}`);
});

只要我不向 models/metData.js 文件发出 router.get 请求,路线 /met 就可以正常工作,但是一旦我发出该请求,我就会收到上述错误。我想知道这是否可能是异步问题。任何见解将不胜感激。

javascript node.js express axios
1个回答
1
投票

您的

searchArt
函数除了记录响应之外不会对响应执行任何操作。它作为 Express 中间件函数也是无效的,因为它从不调用
next()
(请参阅 https://expressjs.com/en/guide/writing-middleware.html)。

在我看来,你的

searchArt
函数应该简单地返回一个用你想要的数据解析的承诺。您可以直接从路由处理程序调用此函数,无需尝试将其用作中间件

const metAPI = {
  async searchArt() {
    return (
      await axios.get(
        'https://collectionapi.metmuseum.org/public/collection/v1/objects/11',
      )
    ).data;
  },
};
// Express v5
router.get('/', async (req, res) => {
  res.send(await metData.searchArt());
});

// or

// Express v4
router.get('/', async (req, res, next) => {
  try {
    res.send(await metData.searchArt());
  } catch (err) {
    next(err);
  }
});
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.