res.locals 可以被客户端访问吗?
Can res.locals Be Accessed By Clients?
上下文
我将整个用户对象存储在 res.locals.loggedUser
中,就像在服务器中这样:
app.use(async (req, res, next) => {
const user = await User.findById(req.session.userid);
res.locals.loggedUser = user;
next();
});
设置res.locals.loggedUser
后,我可以在客户端通过ejs
访问它,像这样:
<% if(loggedUser) { %>
<p>Your name: <%= loggedUser.name %></p>
<% } %>
整个用户对象由这些字段组成:
_id: {
ObjectId("123abc")
},
name: {
type: String,
required: [true, 'Your name is required.']
},
email: {
type: String,
required: [true, 'Email cannot be blank.'],
unique: true
},
phone: {
type: Number,
required: [true, 'You must provide your phone number.'],
unique: true
},
hashpassword: String,
date: {
joined: {
type: Date
}
},
问题
客户端能否访问用户对象的其余字段,如 hashpassword
字段?还是 res.locals
仅对服务器可用?
谢谢!
Can res.locals Be Accessed By Clients?
没有
res.locals
仅存在于服务器上 - 对客户端不可用。
您的服务器端 template/template 引擎可以使用 res.locals
的内容来构建网页,就像您已经使用 <% if(loggedUser) { %>
所做的那样,该网页将被发送到客户端,但是网页中不会有来自 res.locals
的任何内容,除非您专门向模板添加一些内容,将 res.locals
中的内容插入网页。
上下文
我将整个用户对象存储在 res.locals.loggedUser
中,就像在服务器中这样:
app.use(async (req, res, next) => {
const user = await User.findById(req.session.userid);
res.locals.loggedUser = user;
next();
});
设置res.locals.loggedUser
后,我可以在客户端通过ejs
访问它,像这样:
<% if(loggedUser) { %>
<p>Your name: <%= loggedUser.name %></p>
<% } %>
整个用户对象由这些字段组成:
_id: {
ObjectId("123abc")
},
name: {
type: String,
required: [true, 'Your name is required.']
},
email: {
type: String,
required: [true, 'Email cannot be blank.'],
unique: true
},
phone: {
type: Number,
required: [true, 'You must provide your phone number.'],
unique: true
},
hashpassword: String,
date: {
joined: {
type: Date
}
},
问题
客户端能否访问用户对象的其余字段,如 hashpassword
字段?还是 res.locals
仅对服务器可用?
谢谢!
Can res.locals Be Accessed By Clients?
没有
res.locals
仅存在于服务器上 - 对客户端不可用。
您的服务器端 template/template 引擎可以使用 res.locals
的内容来构建网页,就像您已经使用 <% if(loggedUser) { %>
所做的那样,该网页将被发送到客户端,但是网页中不会有来自 res.locals
的任何内容,除非您专门向模板添加一些内容,将 res.locals
中的内容插入网页。