簡體   English   中英

Node.js寫入請求URL的問題,在獲取api請求后同步響應文件

[英]Nodejs issue with writing request url, response to file synchronously after get api request

我在StackOverflow帖子中搜索了很多內容,並能夠找出達到此級別的程序,但是,我無法繼續前進。 如果您可以提出建議,則需要您的建議。

我正在運行一個get API,方法是依次使用URL數組接收2個請求URL,然后使用for循環處理每個URL並將其發送到request.get並能夠在控制台中查看響應。

但是,問題出在我嘗試使用測試用例名稱數組中的測試用例名稱將請求URL及其對應的響應寫入文件時。

它僅使用TC2_reqres.json寫入文件,並放置第一次調用的請求響應。

期待這樣的事情

TC1_reqres.json包含/ people / 1響應TC2_reqres.json包含/ people / 2響應

請提出建議。

謝謝! 提前給你們所有人。

var request = require("request");
var fs = require('fs');

describe('testsuite', function () {
  it("test case", function (done) {
    var urlarr = ["https://swapi.co/api/people/1", "https://swapi.co/api/people/2"];
    var tcnamearr = ["TC1", "TC2"];
    var respath = "C:/Study_JSR/capi/tests/Res/";
    for (var i = 0; i < tcnamearr.length; i++) {
      url = urlarr[i];
      tcname = tcnamearr[i];
      request.get({ url: url, "rejectUnauthorized": false, "json": true }, function (e, r, user) {
        resbod = JSON.stringify(user);
        console.log("resbod: " + resbod);
        fs.writeFileSync(respath + tcname + "_reqres.json", resbod);
      })
    }
    done();
  });
});

Javascript具有閉包和異步調用的奇怪行為。 for循環在調用回調之前完成,因此tcname的值始終為“ TC2”。 您應該嘗試重構代碼。 使用axios代替request 它支持承諾,並且在這些情況下更好。

一種可能的解決方案是:

var request = require("axios");
var fs = require('fs');

describe('testsuite', function () {
  it("test case", function (done) {

    var respath = "C:/Study_JSR/capi/tests/Res/";

    var gets = [
      request.get({ url: "https://swapi.co/api/people/1", "rejectUnauthorized": false, "json": true }),
      request.get({ url: "https://swapi.co/api/people/2", "rejectUnauthorized": false, "json": true })
    ]

    Promise.all(gets).then(function(res) {
      fs.writeFileSync(respath + "TC1" + "_reqres.json", res[0].body)
      fs.writeFileSync(respath + "TC2" + "_reqres.json", res[1].body)
    })

    done();
  });
});

這只是一個起點,您可以根據需要刪除重復項。

嘗試,而不是var使用let

for (let i = 0; i < tcnamearr.length; i++) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM