Javascript 使用nodeJs构建网关
我必须使用nodeJs为API构建一个层,并为前端创建一些端点。 我是nodeJS的新手,我已经用Mongo构建了一些小型服务器,创建了模型并制作了一些CRUD。 这是我第一次必须为现有API创建一个中间层来过滤结果。 我做到了,并且是以预期的格式,但是我从node得到了一个错误,我不知道如何解决它 原始API是这样的:Javascript 使用nodeJs构建网关,javascript,node.js,express,async-await,api-gateway,Javascript,Node.js,Express,Async Await,Api Gateway,我必须使用nodeJs为API构建一个层,并为前端创建一些端点。 我是nodeJS的新手,我已经用Mongo构建了一些小型服务器,创建了模型并制作了一些CRUD。 这是我第一次必须为现有API创建一个中间层来过滤结果。 我做到了,并且是以预期的格式,但是我从node得到了一个错误,我不知道如何解决它 原始API是这样的: { id:'some id', pagination: {...}, results: [...], other_results: [...], addit
{
id:'some id',
pagination: {...},
results: [...],
other_results: [...],
additional_info: [
{
id:'someid',
info:'someinfo',
values:[
{
id: 'someid',
name: 'some category name',
count: 999
},
{...},
{...}
],
},
{...},
{...}
]
}
http://localhost:4000/api/products?search=shirt
我必须从“结果”和第一个“附加信息”数组中“提取”数据
我的端点必须以以下格式返回数据:
{
brand: {name: "Any brand", country: "Germany"},
categories: ["category one", "category two", "category three"],
items: [
0: {id: "olmk23238777", name: "item one", imgUrl: 'img/34341.jpg', price: {total:424, currency: "USD"}, shipping: 'fast'},
1: {id: "olmk23239348", name: "item two", imgUrl: 'img/34764.jpg', price: {total:47, currency: "USD"}, shipping: 'slow'},
…]
}
我可以做到这一点:
const axios = require('axios');
exports.products = async query => {
const url = `${process.env.BASE_URL}${query}`;
let productsData = {
brand: {
name: 'Any Brand',
country: 'Germany',
},
};
try {
const result = await axios({
method: 'GET',
url,
});
const data = result.data;
productsData.categories = data.additional_info[0].values.map(
({ categoryName }) => categoryName
);
productsData.items = data.results.map(item => ({
id: item.id,
name: item.name,
imgUrl: item.imgSrc,
price: {
total: parseInt(item.price),
currency: item.currency,
},
shipping: item.shipping_method,
}));
return productsData;
} catch (error) {
console.log(error);
}
};
这是控制器:
const { products } = require('../utils/products');
exports.searchItem = async (req, res) => {
const { search } = req.query;
try {
const response = await products(search);
res.send(response).json();
} catch (error) {
console.log(error);
}
};
端点如下所示:
{
id:'some id',
pagination: {...},
results: [...],
other_results: [...],
additional_info: [
{
id:'someid',
info:'someinfo',
values:[
{
id: 'someid',
name: 'some category name',
count: 999
},
{...},
{...}
],
},
{...},
{...}
]
}
http://localhost:4000/api/products?search=shirt
这就是错误所在
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
我尝试了不同的方法,但无法修复它首先,您的错误有一个解释: 对于您的代码: 看看这个:
res.send(response.json();
它应该是其中之一:
res.send(响应);
//或
res.json(响应);
有关参数类型/结构,请参阅所选库的文档。
res.json(响应)
而不是res.send(response.json()代码>谢谢!我到处寻找,但我看不到res.send(response.json()的错误;