首先,我对nodejs表达javascript非常新。 我在expressjs有一个应用程序。在loggin之后我设置了req.session.user = user;一切正常,因为我有一个方法restrict(),如果设置或不设置,它会检查req.session.user。
但是,我需要发出系统命令并配置一个路由来处理这个(./ routes / helpers.js):
var exec = require('child_process').exec;
function execChild(cmd, callback){
var child = exec( cmd,
function (error, stdout, stderr)
{output=stdout.replace('\r\n','');
callback(output);}
)};
和另一个发送命令输出的方法(./routes/helpers.js):
exports.cmd = function(req, res) {
execChild(req.body.cmd, function(output){
res.send(output);
});
}
然后我有了发出请求的方法(./routes/index.js):
exports.cmd = function(req, res){
var request = require('request');
var response;
request.post({
url: 'http://localhost:3000/cmd',
form: { "cmd": "ls -lR / | grep node" }
}, function(error, response, body){
res.render('cmd', {title: 'cmd', resp: body});
});
};
在app.js中我有:
app.get('/cmd', user.restrict, routes.cmd);
app.post('/cmd', user.restrict, helpers.cmd);
其中user.restrict是以下方法:
exports.restrict = function(req, res, next) {
// console.log(req.session)
if (req.session.user) {
console.log('OK user logged in')
next();
} else {
console.log('ERR user NOT logged in')
res.redirect('login');
}
}
当我第一次在控制台中访问/ cmd时,我得到(来自限制功能)“OK用户登录”并立即“ERR用户未登录”)
答案 0 :(得分:0)
您的会话登录有效,因为您的会话存储在cookie中,并且浏览器在其请求标头中传输cookie。如果我正确理解您的流程,那么当您GET
/cmd
POST
时POST
进入应用程序本身。后续的POST
来自您的应用,而不是来自您的浏览器。因此,没有会话cookie从您的应用程序传递到自身。通过使用请求库触发它,您将失去登录状态。
请问您为什么要让应用向自己发出{{1}}?您有没有理由不能只使用浏览器中的表单?