Javascript 如何使用node.js request()循环数组
我从将单个值传递到节点API,到传递多个值,API停止发送响应 字段的单个值示例:Javascript 如何使用node.js request()循环数组,javascript,arrays,node.js,express,options,Javascript,Arrays,Node.js,Express,Options,我从将单个值传递到节点API,到传递多个值,API停止发送响应 字段的单个值示例: tracking: "123", // Only one tracking number carrier: "usps" // Only one carrier code 字段的多个值示例: tracking: [ '9361289691090998780363', '784644233417' ], carrier: [ 'usps', 'fedex' ] 我想我需要添加一些循环,但是我不知道怎么做,也不知
tracking: "123", // Only one tracking number
carrier: "usps" // Only one carrier code
字段的多个值示例:
tracking: [ '9361289691090998780363', '784644233417' ],
carrier: [ 'usps', 'fedex' ]
我想我需要添加一些循环,但是我不知道怎么做,也不知道应该用什么术语来查找。这与aync有关吗?我迷路了
request(options, function (error, response, body){});
这是我的密码。如能提供任何帮助/补充信息,以了解我做错了什么,将不胜感激
html.js
controller.js
从你的控制器上,我可以看到,一旦你收到请求,你就会发送回响应。如何再次发送响应 我已经评论了你的res.send'ok'并且它可以工作
app.get("/api/tracking/retrieve", (req, res) => {
var carrier = req.query.carrier;
var tracking = req.query.tracking;
console.log('carrier array', carrier);
console.log('tracking array', tracking);
var options = {
method: "GET",
url: 'https://api.example.com/v1/tracking',
qs: { carrier_code: carrier, tracking_number: tracking },
headers:
{
'api-key': process.env.SECRET_KEY_SE,
'accept': 'application/json'
}
}
console.log("Url: ", req.url);
console.log("Query: ", req.query);
// res.send("ok"); <--
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log('BODY', body)
var trackingData = JSON.parse(body)
console.log('trackingData: ', trackingData);
table = 'tracking_table';
col = [
'user_id',
'tracking_number',
'carrier_code',
];
val = [
user_id,
trackingData.tracking_number,
options.qs.carrier_code,
];
main.create(table, col, val, function (data) {
res.json({
id: data.insertId,
user_id: user_id,
tracking_number: data.tracking_number,
carrier_code: data.carrier_code,
});
})
}
})
});
请提供有关API的更多详细信息。如果您的API只支持一个运营商代码或跟踪号码,您可能需要对每个组合进行排队。我将联系该公司并询问他们。在我看来,您在进行API调用之前发送了一个响应,这可能是一个问题。@TravisDelly我更新了代码以注释掉//res.send'ok;。这就是您所引用的吗?是的,因此,如果您需要循环网络调用或同步function,您需要使用promise.all,您需要使用一个映射,将promises返回到数组中,然后调用promise.allarrayofpromises,并在中。然后您将发送json响应,下面是有关promise.all的更多信息。此修复程序消除了我在前端遇到的一个小错误,但它没有提供我正在调用的API ie的响应:
app.get("/api/tracking/retrieve", (req, res) => {
var carrier = req.query.carrier;
var tracking = req.query.tracking;
console.log('carrier array', carrier);
console.log('tracking array', tracking);
var options = {
method: "GET",
url: 'https://api.example.com/v1/tracking',
qs: { carrier_code: carrier, tracking_number: tracking },
headers:
{
'api-key': process.env.SECRET_KEY_SE,
'accept': 'application/json'
}
}
console.log("Url: ", req.url);
console.log("Query: ", req.query);
// res.send("ok");
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log('BODY', body)
var trackingData = JSON.parse(body)
console.log('trackingData: ', trackingData);
table = 'tracking_table';
col = [
'user_id',
'tracking_number',
'carrier_code',
];
val = [
user_id,
trackingData.tracking_number,
options.qs.carrier_code,
];
main.create(table, col, val, function (data) {
res.json({
id: data.insertId,
user_id: user_id,
tracking_number: data.tracking_number,
carrier_code: data.carrier_code,
});
})
}
})
})
app.get("/api/tracking/retrieve", (req, res) => {
var carrier = req.query.carrier;
var tracking = req.query.tracking;
console.log('carrier array', carrier);
console.log('tracking array', tracking);
var options = {
method: "GET",
url: 'https://api.example.com/v1/tracking',
qs: { carrier_code: carrier, tracking_number: tracking },
headers:
{
'api-key': process.env.SECRET_KEY_SE,
'accept': 'application/json'
}
}
console.log("Url: ", req.url);
console.log("Query: ", req.query);
// res.send("ok"); <--
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log('BODY', body)
var trackingData = JSON.parse(body)
console.log('trackingData: ', trackingData);
table = 'tracking_table';
col = [
'user_id',
'tracking_number',
'carrier_code',
];
val = [
user_id,
trackingData.tracking_number,
options.qs.carrier_code,
];
main.create(table, col, val, function (data) {
res.json({
id: data.insertId,
user_id: user_id,
tracking_number: data.tracking_number,
carrier_code: data.carrier_code,
});
})
}
})
});