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 中的内容插入网页。