我正在节点中开发一个应用程序。js和使用expressJs,但我是
PHP
开发商,我知道
PHP
我们可以使用
session
实现登录,我在节点中思考。js案例是一样的,所以我搜索时发现
express-session
模块,我尝试以这种方式实现。
这
app.js
文件
var express = require('express');
var session = require('express-session');
var bodyParser = require('body-parser');
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'ejs');
app.set('views', 'app/views');
app.use(require('./routes/login_api'));
app.use(require('./routes/login'));
app.use(require('./routes/Index_api'));
app.use(require('./routes/index'));
var server = app.listen(app.get('port'), () => {
console.log('Server is listening on ' + app.get('port'));
});
如你所见,我有四条不同的路线,
/routes/login
呈现登录。ejs模板,
/routes/login_api
处理登录页面的请求和响应,
/routes/Index_api
,则,
/路由/索引api
(这是我的仪表板)也是这样。这是“login\u api”
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var session = require('express-session');
var mysql = require('mysql');
var conn = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'fmis'
});
conn.connect();
router.use(bodyParser.urlencoded({
extended: false
}));
router.use(bodyParser.json());
router.use(session({
secret: 'secret',
saveUninitialized: true,
resave: true
}));
router.post('/login_api', function(req, res) {
var Username = req.body.Username;
var Password = req.body.Password;
var query = "SELECT `User_Id`, `User_Username`, `User_Password`, `User_Name`, `User_Last_Name`, `User_Type`, `User_Photo` FROM `users` WHERE `User_Deleted` = 0 AND `User_Username`='" + Username + "' AND `User_Password` = '" + Password + "'";
conn.query(query, function(err, result) {
if (err) {
console.error(err);
res.end();
} else {
if (result.length == 1) {
req.session.Username = result[0].User_Username;
req.session.Password = result[0].User_Password;
req.session.UserType = result[0].User_Type;
}
}
console.log(req.session.Username); // gives the right result
});
console.log(req.session.Username); // gives the undefined
});
据我所知
session.Username
是一个全局变量(与PHP中的一样)
所以它应该在任何地方都可以访问,但当我在
routes/index
路由它给出未定义的结果,即使写入
console.log(req.session.Username);
在查询回调函数内部,它给出了从数据库返回的正确结果,但当我将其放在查询回调函数外部时,它给出了
undefined
后果
有什么建议请帮帮我