带有cookie的请求内部请求

时间:2017-05-29 11:38:08

标签: node.js node-request

我在配置节点中使用节点请求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吗?

1 个答案:

答案 0 :(得分:0)

我通过在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();

                });

        };