如何使用没有快捷方式蓝图的REST使用搜索sails.js模型?

时间:2013-10-10 10:46:21

标签: node.js rest sails.js

我已关闭快捷方式蓝图(/ model / findAll无法正常工作)现在我想使用REST搜索模型,但我没有找到任何内容,是否有任何文档或我是否必须编写自己的视图是什么?

由于

3 个答案:

答案 0 :(得分:12)

Sails.js中,CRUD和REST蓝图路由已启用开发,但对于生产,我建议您有自己的操作,可以在给定控制器中查找/创建/更新/删除模型

Sails会自动将控制器中的操作映射到相应的路由,而无需手动配置它们,关闭此功能:在 config / controllers中将 actions 标志设置为false。 js 文件

最好用一个例子来解释,所以这里有一个基本模型,它有一些RESTful路由

<强>模型/ user.js的

我们的模型有两个属性,不强制唯一性

module.exports = {

  attributes: {
    name: 'string',
    email: 'string'
  }

};

<强>控制器/ UserController.js

我们的控制器有两个操作, findAll 返回所有用户, findByName 返回给定名称的用户

module.exports = {

  findAll: function (req, res) {
    User.find().done(function (err, users) {
      if (err) {
        res.send(400);
      } else {
        res.send(users);
      }
    });
  },

  findByName: function(req, res) {
    var name = req.param('name');
    User.findByName(name).done(function (err, users) {
      if (err) {
        res.send(400);
      } else {
        res.send(users);
      }
    });
  }

};

<强>配置/ routes.js

我们的路线配置有两条仅响应GET请求的路线,/ user / all将运行 findAll 操作和/ user / name /:名称将运行 findByName 名称作为URL中的参数提供的操作

module.exports.routes = {

  'GET /user/all': 'UserController.findAll',
  'GET /user/name/:name': 'UserController.findByName'

};

有关详细信息,请务必查看Sails.js中documentation个控制器

答案 1 :(得分:4)

只是对上一篇文章的更新,因为我找不到其他人提到这一点而我没有足够的声誉来评论,connections.js文件已在更新版本的Sails中被删除。 JS。这些配置选项现在位于blueprints.js文件中。

答案 2 :(得分:0)

使用Promise,ES6和自定义响应

更新scott's answer
    findAll: function (req, res) {
        User.find().then(users => {
            res.send(users);
        }).catch(() => {
            res.badRequest('Error in GET');
        });
    },

    findByName: function(req, res) {
        var name = req.param('name');
        User.findByName(name).then(users => {
            res.send(users);
        }).catch(() => {
            res.badRequest('Error in GET');
        });
    },