我在配置节点中使用节点请求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吗?
答案 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();
});
};