使用以下控制器,如何在同一控制器中从另一个方法调用一个方法?

具体来说,在成功的signup()中调用login(),同时保留表单使用的login()的相同功能吗?

这行this.login(newUser)不起作用,普通的旧登录名(newUser)也无效

在这两种情况下,我都会收到错误:

 TypeError: Cannot call method 'login' of undefined

var mongoskin = require('mongoskin');

module.exports = {
login: (function (req, res) {
    req.db.collection('auth').findOne({_id: mongoskin.helper.toObjectID(req.body.id)},
        function (err, results) {
            // log person in and send results to client
        }
    )
}),

signup: (function (req, res) {
    var user = req.body;
    req.db.collection('auth').insert(user, function (err, newUser) {
            // after adding user, automatically log them in

            // does not work:
            //login(newUser, function (err) {
               // do something
            //})

            // does not work:
            this.login(newUser, function (err) {
               // do something
            })
        }
    )
})
}

#1楼 票数:1

控制器应该做得尽可能少,并且应该通过执行存储在其他位置的功能来协调所需的工作。

查看要点- 单击此处

我所做的是创建与客户请求无关的“服务”,因此可在任何地方重复使用。

希望这可以帮助。

#2楼 票数:0

感谢Dave Newton

var mongoskin = require('mongoskin');
var myCollection = 'auth';

function localLogin(db, myCollection, user, res){
    db.collection(myCollection).findOne({_id: mongoskin.helper.toObjectID(user._id)}, 
    function(err, user){
        res.send({ token: createToken(user) });
});

 module.exports = { 
    login: (function (req, res) {
     var user = req.body;
     localLogin(req.db, myCollection, user, res)
   }, 
    signup: (function (req, res) {
       var user = req.body;
         req.db.collection(myCollection).insert(user, function (err, newUser) {
          // after adding user, automatically log them in
          localLogin(req.db, myCollection, newUser, res)
         })
     }
 ) }) }

  ask by translate from so

未解决问题?本站智能推荐:

1回复

从一种控制器方法到另一种方法的Node.js回调

我在项目中创建了一个emailHelper来发送电子邮件。 一旦电子邮件发送成功,我希望得到回电 我只想在发送电子邮件时将数据保存到数据库 谢谢
1回复

有没有办法实现一种方法来上传文件并在MERN中从服务器查看它们?

我想为用户实现一个上传文件的功能(就像文档,ppts,文本文件一样)并保存到DB和另一个来查看来自服务器的文件? 是否有任何框架或npm模块?
1回复

为什么NodeJS没有从控制器调用服务方法?

我正在开发一个 Node JS 项目,其中我的应用程序具有以下文件夹结构: 问题是每当我尝试调用服务文件中存在的方法时,它在到达它并进入 catch 后跳过该行。 以下是我的控制器和服务的代码: admin.controller.ts admin.service.ts 我不明白它从哪里停止。 我
3回复

如何在Node中的另一个控制器中调用一个控制器方法

所以我有一个控制器,其方法定义为 controller1.js 这在自己的类中运行良好,我可以通过localhost从外部调用它。 我希望能够在另一个控制器中同时使用这两个功能。 所以在另一个文件中 controller2.js 当我尝试在controller2.js中调用g
1回复

node.js导出调用控制器中的另一个控制器方法[重复]

这个问题在这里已有答案: Node.js module.exports的目的是什么,你如何使用它? 12个答案 我想调用一个方法控制器B,说它是conB.js,看起来像这样 那么现在我在conA.js中,如何调用conB的验证并将参数传递给它? 我首先知道我必须包括它
2回复

无法在路由NodejsExpressTypescript中调用方法控制器内的方法

我有两节课; authenticationRoutes.ts 和 authenticationController.ts。 在 authenticationRoutes 中,我正在调用“authenticationController.test”,“authenticationController
2回复

如何从单个服务器端模块(js文件)导出2种方法?

我正在使用Node / Express。 我有一个服务器,index.js。 我有一个不同的js模块,称为validmoves.js。 通常,我可以说出我在模块中定义的单个函数: 然后在快速服务器文件index.js中要求它,方法是: 如何从模块导出2功能? 其中之一实际上是
1回复

到服务器控制器的POST方法期间,主体为空

我正在从客户端请求包含对象的发送响应,但是在后端,当我console.log(req.body)时,服务器将其显示为空白对象。 这几乎是我过去所做的示例中的复制粘贴,它发送和请求一个对象以将其发布到数据库。 这是我所拥有的: 这是在“ api.js”中 “数据”是我要发送的对象,