为node.js创建一个动态的resti api

时间:2015-03-28 21:35:47

标签: javascript node.js rest

我在我的node.js应用程序中使用mongodb几乎所有东西,现在我想创建一个安静的应用程序,所以,我做到了:

我现在正尝试使用get方法:

restApi.js:

var restAPI = {

  get: function(method, model, sort, limit, options) {
    if (method !== 'get') {
      return;
    }

    model.find(options).sort(sort).limit(3).exec(function (error, result) {
      if (error) {
        return error;
      } else {
        return result;
      }
    });

  },
};

现在我可以在我的路线中要求这个:

var restApi = require('restApi');

并使用如下:

app.get('/', function(req, res, next) {
  var result = restAPI.get('get', Event, 'date', 3, {'isActive': true});

  res.render('/', {
    result: result
  });
});

不工作,结果未定义。为什么?

如何使用回调在异步函数中转换它?这可能吗?

谢谢! :)

2 个答案:

答案 0 :(得分:0)

您没有从restApi.get返回任何内容。如果你正在使用猫鼬,你可以很容易地返回一个Promise:

var restAPI = {

  get: function(method, model, sort, limit, options) {
    if (method !== 'get') {
      return;
    }

    return model.find(options).sort(sort).limit(3).exec();
  },
};

然后你可以像这样使用它:

app.get('/', function(req, res, next) {

  restAPI.get('get', Event, 'date', 3, {'isActive': true}).then( function ( result ) {

    res.render('/', {
      result: result
    });
  }).catch( error ) {

    // Render error page and log error      

  });

});

答案 1 :(得分:0)

这是因为你的模型是异步的。你必须通过回调。

使用异步方式更好,因为它在等待响应时不会阻止您的应用程序。

案例示例:

restApi.js:

var restAPI = {

  get: function(method, model, sort, limit, options, cb) {
    if (method !== 'get') {
      return cb("Method must be GET");
    }

    model.find(options).sort(sort).limit(3).exec(function (error, result) {
      if (error) {
        return cb(error);
      } else {
        return cb(null, result);
      }
    });

  },
};

现在我可以在我的路线中要求这个:

var restApi = require(' restApi');

并使用如下:

app.get('/', function(req, res, next) {

  restAPI.get('get', Event, 'date', 3, {'isActive': true}, function(err, result){

      if(err)
        return res.render("Error:" + err)

      res.render('/', {
        result: result
      });

  });

});

我已将 cb 参数添加到您的REST API函数中,以便在完成模型异步操作时调用它。

路由器处理程序传递它的回调并在操作完成时打印输出。