有关蓝图的概念概述,请参阅 概念 > 蓝图。
激活/停用蓝图的过程会根据您关注的蓝图路由类型略有不同(RESTful 路由、快捷路由或操作路由)。有关不同蓝图类型的讨论,请参阅 蓝图路由文档部分。
要更改蓝图路由,我们建议 显式配置自定义路由。类似地,如果您想覆盖蓝图操作,我们建议编写您自己的 自定义操作。
但如果您确实知道自己在做什么,请继续阅读
要覆盖单个模型的 RESTful 蓝图路由,只需在相关控制器文件中创建具有相应名称的操作(或在相关文件夹中创建 独立操作):find、findOne、create、update、destroy、populate、add 或 remove。
如果您想覆盖所有模型的特定蓝图,请查看 sails-hook-custom-blueprints 插件。重要的是要意识到,即使您没有自己定义这些,只要操作或快捷蓝图在您的 蓝图配置 中启用,Sails 就会以 JSON API 的形式对每个模型响应内置的 CRUD 逻辑(包括对排序、分页和过滤的支持)。
由于虚拟请求解释器,蓝图 API 与 WebSockets 兼容(您的任何自定义操作和策略也是如此)。请查看浏览器 SDK 上的参考部分(参考 > WebSockets > sails.io.js)以获取示例用法。
.subscribe()
默认情况下,**查找** 和 **查找一个** 蓝图操作会在使用套接字请求时自动调用 .subscribe()
。这会将请求套接字订阅到每个返回的记录。但是,如果相同的套接字使用 io.socket.put()
(例如)向 **更新** 或 **销毁** 操作发送请求,则默认情况下不会将消息发送到请求套接字,而是发送到其他已连接的已订阅套接字。这样做的目的是允许 UI 代码使用客户端 SDK 的回调单独处理服务器响应,例如替换加载微调器。
默认情况下,**find** 蓝图操作(当通过 WebSocket 请求触发时)会将请求套接字订阅到有关创建该模型的新实例的通知。可以通过将 sails.config.blueprints.autoWatch
设置为 false
来更改所有模型的此行为。
以下技术仅出于兼容性原因才受支持。无论您是否使用蓝图操作,请只使用自定义路由!
如果您使用控制器而不是独立操作文件,则可以通过在控制器定义中定义 _config
键,从 config/blueprints.js
中禁用每个控制器的某些设置。
// In /api/controllers/PetController.js
module.exports = {
_config: {
actions: false,
shortcuts: false,
rest: false
}
}
不支持在每个控制器基础上禁用
shortcuts
样式的自动路由。这永远不需要,因为您不应该在生产环境中使用shortcuts: true
。