【发布时间】:2020-12-23 16:06:52
【问题描述】:
首先,我是一名前端开发人员,如果我在解释中使用了错误的术语,我深表歉意。
在我的公司,我们实际上正在构建 1 个 Web 应用程序和 2 个 API 应用程序。因此,用户使用与第一个 API 对话的 Web 应用程序,该 API 与第二个 API 对话。
这里,我们在第一个 API 中,在 server.js 文件中:
server.js
---------
var app = express();
const cats = require("./api/cats");
app.get("/animals/cats", cats.listTheCats); // listTheCats() returns an array of cats
在cats.js 中,我们可以通过listTheCats() 看到我们正在向第二个API 发送另一个请求:
cats.js
-------
const listTheCats = (req, res) => {
axios({
method: "get",
url: "http://second-api-url.com/animals/cats",
params: req.query,
})
.then((ans) => {
res.status(ans.data.status).json(ans.data.data);
})
.catch((err) => {
console.log(err);
res.sendStatus(503);
});
};
module.exports = listTheCats;
上面的代码在网络应用上运行良好。但是现在,在第一个 api 中,在另一个名为“cuteAnimals.js”的文件中,我需要调用 listTheCats()。所以我尝试这样做,但它不起作用:
cuteAnimals.js
--------------
const { listTheCats } = require("./cats");
const fetchCats = async () => {
const params = {
type: "cute",
};
const cuteCats = await axios.get(`animals/cats`, {
params,
});
// or const cuteCats = await listTheCats(params);
console.log("cuteCats", cuteCats);
};
fetchCats();
这是错误:“请求失败,状态码为 400”
在cuteAnimals.js中,使用axios从一个文件到同一个服务器项目的另一个文件是否正确?
【问题讨论】:
-
感谢您的回答。不幸的是,这行代码已经写在我的代码中了,我忘了在这里添加到我的帖子中......
-
你上次sn-p中使用的参数是怎样的?
-
在上面的代码块“cats.js”中,“params”对象应该位于req.query 属性中,该属性分配给get 请求的“params”属性。这就是为什么我怀疑我在“cuteAnimals.js”文件中使用 axios 的方式是错误的。我什至不确定 URL“animals/cats”是否指向服务器端口。在“cuteAnimals.js”中,我还尝试直接使用导入的 listTheCats() 函数而不是 axios.get(...) 但在记录结果时出现“未定义”。它的行为没有延迟,因为它是同步的,但它不应该并且使用 async/await 词并不能解决它..
标签: javascript node.js express axios backend