请求对象中的MEANJS猫鼬模型

MEANJS mongoose model in request object

本文关键字:模型 MEANJS 对象 请求      更新时间:2023-09-26

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

它是从哪里添加到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);
};

在使用meanjs app.param([name], callback)时,每当访问参数中具有某种id(如articeId)的路由时,就会触发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

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

请参阅http://passportjs.org/guide/authenticate/.