返回

时间:2016-03-10 20:52:44

标签: node.js mongodb rest express mongoose

我正在制作一个刷新数据' Node中的函数,我无法弄清楚回调和返回的位置。该功能继续运行。下面列出了该功能应该做的事情。有人可以帮忙吗?

  1. 检查用户是否在本地MongoDB中有api id
  2. 使用POST调用REST api以接收令牌
  3. 将令牌结果存储在MongoDB中
  4. 终止功能
  5. ./路由/ index.js

    router.post('/refresh', function(req, res) {
        var refresh = require('../api/refresh');
        refresh(req, function() { return console.log('Done'); });
    });
    

    ../ API / refresh.js

    var callToken = require('./calltoken');
    var User = require('../models/user'); // Mongoose Schema
    
    module.exports = function(req, callback) {
      User.findOne( {'username':req.body.username}, function(err, user) {
        if(err) { console.log(err) }
        if (user.api_id == 0) {
          callToken.postToken(req.body.username, callback);
        } else { // Do something else }
      });
    };
    

    ./ calltoken.js

    var request = require('request');
    var Token = require('../models/token');  // Mongoose Schema
    
    module.exports = {
    
      postToken: function(user, callback) {
        var send = {method:'POST', url:'address', formData:{name:user} };
        request(send, function(err, res, body) {
          if(err) { console.log(err) }
          if (res.statusCode == 201) { 
            var newToken = new Token();
            newToken.token = JSON.parse(body).access_token['token'];
            newToken.save(function(err) {
              if(err) { console.log(err) }
              return callback();
            });
          }
        });
      }
    };
    

1 个答案:

答案 0 :(得分:0)

我不是Express的专家,但你在if(err) { console.log(err) }行代码中的任何地方你应该停止执行(当然可能不是 - 取决于你的应用程序)并将400或500返回给客户端。所以它可能像

if(err) { 
  console.log(err);
  return callback(err);  // NOTICE return here
}

成功执行后,您应致电return callback(null, result)。注意null为第一个参数 - 它是根据nodejs约定(错误总是作为第一个参数)。