请求对象中的 MEANJS 猫鼬模型

MEANJS mongoose model in request object

我刚开始 meanjs。当我查看它的服务器端模块用户配置文件控制器时,我发现猫鼬模型用户在 req 对象中可用。

它是从哪里添加到请求对象中的?

参考下面的代码,我想了解var user = req.user;user是如何添加到req对象中的?

'use strict';

/**
 * Module dependencies.
 */
var _ = require('lodash'),
 errorHandler = require('../errors.server.controller.js'),
 mongoose = require('mongoose'),
 passport = require('passport'),
 User = mongoose.model('User');

/**
 * Update user details
 */
exports.update = function(req, res) {
 // Init Variables
 var user = req.user;
 var message = null;

 // For security measurement we remove the roles from the req.body object
 delete req.body.roles;

 if (user) {
  // Merge existing user
  user = _.extend(user, req.body);
  user.updated = Date.now();
  user.displayName = user.firstName + ' ' + user.lastName;

  user.save(function(err) {
   if (err) {
    return res.status(400).send({
     message: errorHandler.getErrorMessage(err)
    });
   } else {
    req.login(user, function(err) {
     if (err) {
      res.status(400).send(err);
     } else {
      res.json(user);
     }
    });
   }
  });
 } else {
  res.status(400).send({
   message: 'User is not signed in'
  });
 }
};

/**
 * Send User
 */
exports.me = function(req, res) {
 res.json(req.user || null);
};

Passport 的身份验证中间件在成功登录后设置 req.user

参见http://passportjs.org/guide/authenticate/

在meanjs中使用app.param([name], callback),每当访问参数中带有articeId的id的路由时,都会触发app.param([name], callback)中间件。在 meanjs 中,它像这样设置 req.article

    app.param('articleId', articles.articleByID);

并在 articleByID

exports.articleByID = function(req, res, next, id) {

  if (!mongoose.Types.ObjectId.isValid(id)) {
    return res.status(400).send({
        message: 'Article is invalid'
    });
    }

Article.findById(id).populate('user', 'displayName').exec(function(err, article) {
    if (err) return next(err);
    if (!article) {
        return res.status(404).send({
            message: errorHandler.getErrorMessage(err)
        });
    }
    req.article = article;
    next();
});
};

有关 app.param 的更多信息,请参阅 http://expressjs.com/api.html#app.param