我希望能够在用户登录后设置全局变量,并在应用程序的任何脚本中引用它们。这样做的原因是为了避免大量页面传递相同的值。
我的index.js是这样开始的:
var express = require('express');
var session = require('express-session');
var bodyParser = require('body-parser');
var path = require('path');
var app = express();
app.set('view engine', 'ejs');
app.use("/static", express.static('./views/pages/'));
app.locals.uaccId = ""; // These are my globals
app.locals.uaccName = "";
app.locals.uaccOrgId = "";
app.locals.uaccOrgName = "";
app.locals.uaccEmail= "";
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true
}));
app.use(bodyParser.urlencoded({extended : true}));
app.use(bodyParser.json());
成功登录后(使用数据库),我在request.session
中设置了一些值,这些值用于设置app.locals
的值(我以为我可以在EJS页面中引用request
,但我发现我不能):
app.post('/auth', function(request, response) {
console.log ( '/auth' );
let lgn = require( "./mods/auth.js");
lgn.login(request, response); // Sets values in request.session
app.locals.uaccId = request.session.uaccId,
app.locals.uaccName = request.session.uaccName,
app.locals.uaccOrgId = request.session.uaccOrgId,
app.locals.uaccOrgName = request.session.uaccOrgName;
app.locals.uaccEmail = request.session.uaccEmail;
});
现在,当我呈现任何页面时,我希望在页面标题中显示一些用户详细信息,因此在我的ejs文件中,我有:
<header>
<%- include('../partials/header'); %>
</header>
然后header.ejs有:
<div class='toplink'> <%= uaccName.replace(/ .*/, '') %> </div>
<div class='toplink'> @ <%= uaccOrgName %> </div>
但是当我运行这个时,我得到:
TypeError: /u01/WorkSpace/node/views/pages/index.ejs:10
8|
9| <header>
>> 10| <%- include('../partials/header'); %>
11| </header>
12|
13| <div class='centerBox'>
/u01/WorkSpace/node/views/partials/header.ejs:6
>> 6| <div class='toplink'> <%= uaccName.replace(/ .*/, '') %> </div>
7| <div class='toplink'> @ <%= uaccOrgName %> </div>
Cannot read property 'replace' of undefined
1条答案
按热度按时间yr9zkbsy1#
我没有点击我下面的代码不只是在启动时执行-它将得到执行,每次请求一个路由。
我在上面的
app.use(bodyParser.json());
行之后添加了以下内容,然后它开始工作。