如何在nodejs中设置运行多个控制器功能

How to set run multiple controller functions in nodejs

本文关键字:控制器 功能 运行 设置 nodejs      更新时间:2023-09-26

我目前正在工作的锅炉板代码的平均值。IO和实现密码发送给它。当用户要求以email作为参数重置密码时,我创建了一个salt(resetid),并将该salt作为重置链接发送给他。

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

/**
 * 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被定义为

应用程序。回调参数([名字])将逻辑映射到路由参数。例如,当:user出现在路由路径中时,你可以映射用户加载逻辑来自动提供请求。