简体   繁体   English

如何使用node.js request()循环数组

[英]How to loop arrays with node.js request()

I went from passing single values into my node API to passing multiple values and the API stopped sending a response back. 我从传递单个值到我的节点API到传递多个值,API停止发送响应。

Example of single values for fields: 字段的单个值示例:

tracking: "123", // Only one tracking number
carrier: "usps" // Only one carrier code

Example of multiple values for fields: 字段的多个值的示例:

tracking: [ '9361289691090998780363', '784644233417' ],
carrier: [ 'usps', 'fedex' ]

I think I need to add some sort of loop but I cant figure out how to do this nor do I know what the proper terminology is to look this up. 我想我需要添加某种循环,但是我无法弄清楚该怎么做,也不知道查找该词的正确术语。 Is this related to aync? 这与aync有关吗? I'm lost. 我迷路了。

request(options, function (error, response, body){});

Here is my code. 这是我的代码。 Any help / additional information would be grateful in understanding what I am doing wrong. 任何帮助/补充信息都会对我理解我做错了什么感激不尽。

html.js html.js

// These are sent over in an AJAX call //
var trackingNumber = ['9361289691090998780363', '784644233417'];
var carrierCode = ['usps', 'fedex'];

controller.js controller.js

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,
                });
            })
        }
    })

})

From your controller I can actually see that as soon as you get the request, you are sending the response back. 从您的控制器上,我实际上可以看到,一旦收到请求,您就将响应发送回去。 How can you send response again? 你怎么能再次发送回复?

I have commented your res.send('ok') and it works. 我已经评论了你的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,
                });
            })
        }
    })
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM