带有 cookie 的节点请求内部请求

Node Request inside request with cookie

我在我的配置节点中使用节点请求 var request = require(“request”); 来执行 POST 请求,并作为响应获得一个 Cookie,需要在所有其余请求中引用它。

我尝试启用 COOKIE JAR,如果我在第一个请求下链接我的请求,它工作正常,但我想从自定义节点调用其余请求,如 GetList。

我尝试添加 var j = request.jar(new FileCookieStore(‘cookies.json’)) 时 toughcookie(文件 cookie)不起作用; 节点停止工作,没有错误。

下面是我的配置节点,用于获取 Cookie 的代码。

function myAuthNode(n) {

        RED.nodes.createNode(this,n);
        this.username=n.username;
        this.password=n.password;


            this.connect=function(){
                //TODO-NG need to make URL configurable
                request.post({url: "http://localhost:8080/api/method/login", qs: {usr: this.username, pwd: this.password}}, function(err, res, body) {

                    if(err) {
                            return console.error(err);
                    }

                    console.log("HERE IF I PUT REQUEST Works fine");
                    console.log("CAN WE PASS ANOTHER REQUEST here from calling SOURCE to execute here?");

                });

        };



    }

在我调用的这个自定义节点中

 // The main node definition - most things happen in here
    function GetListNode(n) {
        // Create a RED node
        RED.nodes.createNode(this,n);
        console.log('I am called');

        //using auth config now you are connected, tell me what is needed?
        this.authConfig=RED.nodes.getNode(n.auth);
        //connect to config and do auth

        this.authConfig.connect();

//THIS ALWAYS FAILS due to cookie not found where as I enable request JAR

       request.get({url: "http://localhost:8080/api/resource/Project"}, function(err, res, body) {

                if(err) {
                        return console.error(err);
                }

                    console.log("Response body:", body);

            });


    }

请建议如何处理请求中的cookie,以便所有经过auth 的请求都能正常工作?

我们能否将请求定义传递给另一个请求在其中执行,或者如何处理 Cookie?

我通过在 GetListNode() 中执行以下操作解决了这个问题,我在调用中转移了第二个请求:

this.authConfig.connect(function(){request.get({url: "http://localhost:8080/api/resource/Project"}, function(err, res, body) {

        if(err) {
                return console.error(err);
        }

            console.log("Response body:", body);

    });});

我在下面做的配置节点中,添加了一个函数参数并调用了传递的函数,工作得很好:):

this.connect=function(f){
                //TODO-NG need to make URL configurable
                request.post({url: "http://localhost:8080/api/method/login", qs: {usr: this.username, pwd: this.password}}, function(err, res, body) {

                    if(err) {
                            return console.error(err);
                    }

                     f.call();

                });

        };