7

我已经关闭了快捷方式蓝图(/model/findAll 不起作用),现在我想使用 REST 搜索模型,但我没有找到任何东西,是否有任何文档或者我必须为此编写自己的视图?

谢谢

4

3 回答 3

12

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

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

这最好用一个例子来解释,所以这里是一个包含一些 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/:name 将运行findByName操作,名称作为 URL 中的参数给出

module.exports.routes = {

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

};

有关更多信息,请务必查看Sails.js 中的控制器文档

于 2013-10-10T11:35:49.843 回答
4

只是对上一篇文章的更新,因为我找不到其他人提到这个并且我没有足够的声誉来发表评论,所以该connections.js文件已在最新版本的 Sails.js 中被删除。这些配置选项现在在blueprints.js文件中。

于 2014-08-31T14:03:52.190 回答
0

使用 Promise、ES6 和自定义响应更新scott 的答案

    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');
        });
    },
于 2018-03-02T14:57:47.570 回答