Mongoose“创建”方法 - 没有回调吗? (使用护照和角度)

Posted

技术标签:

【中文标题】Mongoose“创建”方法 - 没有回调吗? (使用护照和角度)【英文标题】:Mongoose "Create" method - Is there no callback? (Using passport and angular) 【发布时间】:2015-02-09 23:47:51 【问题描述】:

我正在使用 mongoose 在注册时创建用户对象。这工作正常,任何错误都会按预期返回。

但是,我想在用户注册后立即登录(所以如果没有错误,注册会登录)。

我有以下的寄存器。

注册控制器:

$scope.submitRegister = function() 
    AuthenticationService.register(this.details).success(function() 
        $log.debug('/POST to /api/register worked');
    );

services.js:

.service('AuthenticationService', function($http, $timeout, $q, $session, $flash) 
    ...
    this.register = function(details) 
        var register = $http.post('/api/register', details);
        register.success(function() 
            console.log("User added fine"); 
        ).error(function() 
            console.log("error!!!");
        );
        return register;
    ;
    ...

users.js:

app.post('/api/register', authentication.register);

护照的authenticate.js:

module.exports = 
...
  register: function(req, res)
    var User = require('./controllers/api/login_api');
    User.create(name: req.body.name, email: req.body.email, password: req.body.password, function(err)
      if (err) 
        console.log(err);
        return;
      
      console.log("User added"); 
      return res.send(200);
    );
  ,
...

错误报告很好,没有麻烦,但我原以为它会报告其他东西(比如创建的对象?),我可以使用它,这样我的 register_controller 就可以成功function(object) ... login(object);...

这是 .create 方法的限制还是我遗漏了一些明显的东西?

谢谢。

【问题讨论】:

顺便说一句,如果发生错误,我会返回 4XX 响应,您可以使用客户端的拦截器将它们全部捕获。 您想将创建的对象从 mongo 返回给您的客户端吗? @jack.the.ripper if (err) console.log(err); return res.send(4XX, err); - 像这样? @BenDiamant 是的,注册后,在成功回调中我想调用登录​​,这需要电子邮件和密码才能登录(login(credentials) @Gary 正确,始终发送响应是一个好习惯,您可以在客户端处理。 @jack.the.ripper 谢谢,现在添加了。 【参考方案1】:

你的服务器代码有两点需要改变:

护照的authenticate.js:

module.exports = 
...
  register: function(req, res)
    var User = require('./controllers/api/login_api');
    User.create(name: req.body.name, email: req.body.email, password: req.body.password, function(err, user)
      if (err) 
        console.log(err);
        return;
      
      console.log("User added"); 
      return res.send(200, user);
    );
  ,
...

我已将用户添加到您的回调 Mongoose model.create api - 将创建的对象返回给 CB

并更改客户端中的捕获:

.service('AuthenticationService', function($http, $timeout, $q, $session, $flash) 
...
this.register = function(details) 
    var register = $http.post('/api/register', details);
    register.success(function(user) 
        console.log(user); 
    ).error(function() 
        console.log("error!!!");
    );
    return register;
;
...

现在您可以根据需要对创建的用户对象做任何事情

【讨论】:

太棒了,谢谢。没想到要加在那里!

以上是关于Mongoose“创建”方法 - 没有回调吗? (使用护照和角度)的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose - 向回调中返回的对象添加方法

Mongoose find() 回调实际上没有被调用

mongoose 文档 queries

猫鼬保存卡住(从未调用过回调)

Mongoose:我如何避免回调地狱,同时允许对不返回承诺的 mongoose 方法进行存根?

Mongoose .save() 不能在没有回调的情况下工作