如何在Node.js中设置运行多个控制器功能

拉朱

我目前正在研究mean.io的样板代码,并对其执行passwordresetemail。当用户要求使用电子邮件作为参数重置密码时,我会创建一个salt(resetid)并向他发送一封电子邮件,其中包含该salt作为重置链接。

我在要求中有用户的电子邮件,但想在用户进入实际的createemail控制器功能之前附加用户的其他信息(user._id)。我希望在进入createResetPasswordEmailLink之前先运行以下函数(userbyemail)

/**
 * Find user by email
 */
exports.userByEmail = function(req, res, next, email) {
    User
        .findOne({
            email: email
        })
        .exec(function(err, user) {
            if (err) return next(err);
            if (!user) return next(new Error('Failed to load User with email ' + email));
            req.user = user;
            next();
        });
};

exports.createResetPasswordEmailLink = function(req, res) {

    var resetPassword = new ResetPassword(req.body);
    resetPassword.resetId = new User().makeSalt();
    **resetPassword.user = req.user._id;  // currently req.user is null**

    console.log(resetPassword.userId);
    resetPassword.save(function(err) {
        if (err) {
            // handle error
        }
        res.status(200);
        return res.redirect('/');
    });
};

以下是我的resetPassword模式

var ResetPasswordSchema = new Schema({
    created: {
        type: Date,
        default: Date.now
    },
    resetId: {
        type: String,
        default: '',
        trim: true
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
});

我的路线定义如下

// Setting up the users resetpasswordlink
app.route('/createresetpasswordemaillink')
    .post(users.createResetPasswordEmailLink);
拉朱

我可以使用app.params解决此问题。App.params正是针对这种用法而定义的。

我加了

// Setting up the userId param
app.param('email', users.userByEmail);

到我的路线,它会在将请求传递给常规控制器之前自动执行此功能。

从文档中,App.param定义为

app.param([name],callback)映射逻辑以路由参数。例如,当:user存在于路径路径中时,您可以映射用户加载逻辑以自动将req.user提供给路径,或对参数输入执行验证。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在多个控制器中重用功能

来自分类Dev

如何在sailsjs控制器中运行多个查询?

来自分类Dev

如何在控制器之前运行指令功能?

来自分类Dev

如何在Backbone.Marionette中设置多个路由器和控制器

来自分类Dev

如何在Backbone.Marionette中设置多个路由器和控制器

来自分类Dev

如何在ember.js的同一路由中设置多个控制器?

来自分类Dev

如何在控制器中测试将值传递给服务设置器的设置器功能

来自分类Dev

如何在Spring Boot应用程序中运行多个控制器?

来自分类Dev

如何在angular.js插件中覆盖控制器功能

来自分类Dev

如何在我的Node.js应用程序中合并模型和控制器?

来自分类Dev

如何在Laravel中调用正确的控制器功能?

来自分类Dev

如何在角度控制器中测试本地功能?

来自分类Dev

如何在指令链接中访问控制器功能?

来自分类Dev

如何在功能扩展控制器中获取数据?

来自分类Dev

如何在Laravel中调用正确的控制器功能?

来自分类Dev

如何在Ember.js单元测试中为控制器设置模型数据

来自分类Dev

如何在控制器B中设置控制器A中属性的值?

来自分类Dev

如何在Spring MVC中映射多个控制器

来自分类Dev

如何在多个文件中定义控制器-AngularJs

来自分类Dev

如何在laravel控制器中插入多个记录

来自分类Dev

如何在Spring MVC中映射多个控制器

来自分类Dev

如何在现有导航控制器中设置标签栏控制器?

来自分类Dev

如何在Angular JS中的另一个控制器中调用/触发一个控制器功能

来自分类Dev

如何从angularjs中的控制器CandidateCtrl.js访问Data.js的功能?

来自分类Dev

如何在Angular.js中访问控制器

来自分类Dev

如何在数组控制器中声明项目控制器-ember.js

来自分类Dev

如何在Angular JS的子控制器中访问父控制器数据

来自分类Dev

如何在 Node JS 中使用 express 创建控制器和路由器

来自分类Dev

如何从node.js到angular.js控制器运行moment.js代码?

Related 相关文章

  1. 1

    如何在多个控制器中重用功能

  2. 2

    如何在sailsjs控制器中运行多个查询?

  3. 3

    如何在控制器之前运行指令功能?

  4. 4

    如何在Backbone.Marionette中设置多个路由器和控制器

  5. 5

    如何在Backbone.Marionette中设置多个路由器和控制器

  6. 6

    如何在ember.js的同一路由中设置多个控制器?

  7. 7

    如何在控制器中测试将值传递给服务设置器的设置器功能

  8. 8

    如何在Spring Boot应用程序中运行多个控制器?

  9. 9

    如何在angular.js插件中覆盖控制器功能

  10. 10

    如何在我的Node.js应用程序中合并模型和控制器?

  11. 11

    如何在Laravel中调用正确的控制器功能?

  12. 12

    如何在角度控制器中测试本地功能?

  13. 13

    如何在指令链接中访问控制器功能?

  14. 14

    如何在功能扩展控制器中获取数据?

  15. 15

    如何在Laravel中调用正确的控制器功能?

  16. 16

    如何在Ember.js单元测试中为控制器设置模型数据

  17. 17

    如何在控制器B中设置控制器A中属性的值?

  18. 18

    如何在Spring MVC中映射多个控制器

  19. 19

    如何在多个文件中定义控制器-AngularJs

  20. 20

    如何在laravel控制器中插入多个记录

  21. 21

    如何在Spring MVC中映射多个控制器

  22. 22

    如何在现有导航控制器中设置标签栏控制器?

  23. 23

    如何在Angular JS中的另一个控制器中调用/触发一个控制器功能

  24. 24

    如何从angularjs中的控制器CandidateCtrl.js访问Data.js的功能?

  25. 25

    如何在Angular.js中访问控制器

  26. 26

    如何在数组控制器中声明项目控制器-ember.js

  27. 27

    如何在Angular JS的子控制器中访问父控制器数据

  28. 28

    如何在 Node JS 中使用 express 创建控制器和路由器

  29. 29

    如何从node.js到angular.js控制器运行moment.js代码?

热门标签

归档