大多数 Sails 框架的用户永远不需要访问 sails
应用对象中超过几个基本方法。但是,如果您有高级用例或正在考虑为 Sails 贡献代码,您可能需要深入研究一些这些不太常用的方法或参考Sails 核心加载顺序。
sails
全局对象我们建议在 Sails 中使用 sails
全局对象。
但是,sails
的自动全局化可以禁用。在需要同时存在多个 Sails 应用实例或全局对象不可用的情况下,禁用 sails
全局对象可能是一个好主意。
如果禁用了 sails
全局对象,则需要另一种方法来引用应用实例。幸运的是,这在应用的几乎任何地方都是可能的
所有已加载的Sails 钩子的字典,以其标识为索引。使用 sails.hooks
访问已安装以扩展 Sails 的钩子的属性和方法,例如,通过调用 sails.hooks.email.send()
。您还可以使用此字典访问 Sails 核心钩子,用于高级用法。
默认情况下,钩子的标识是其文件夹名称的小写版本,并删除了任何 sails-hook-
前缀。例如,从 node_modules/sails-hook-email
加载的钩子的默认标识将为 email
,并且可以通过 sails.hooks.email
访问该钩子。已安装钩子的标识可以通过installedHooks
配置属性更改。
有关钩子的更多信息,请参阅钩子概念文档。
sails.io
由sails.sockets.*
方法公开的 API 在开箱即用方面足够灵活,可以满足大多数应用程序的要求,并且使用它们将使您的应用程序免受底层实现中可能发生的更改的影响。但是,如果您正在将一些来自普通 Socket.io 应用程序的遗留代码引入您的 Sails 应用程序,则直接与 Socket.io 交谈可能很有用。为了实现这一点,Sails 提供了对底层socket.io服务器实例 (io
) 作为 sails.io
的原始访问权限。有关更多信息,请参阅Socket.io 文档。如果您决定直接使用 Socket.io,请小心操作。
Sails 将
socket.io
捆绑为sails-hook-sockets(一个核心钩子)的依赖项。
第一次您 require('sails')
时,会自动创建一个应用程序实例。
这就是在生成的 app.js
文件中发生的事情
var sails = require('sails');
请注意,任何后续对 require('sails')
的调用都返回相同的应用程序实例。(这就是为什么您有时可能会听到 Sails 应用实例被称为“单例”的原因。)
如果您正在实现一些非常规的事情(例如,为 Sails 核心编写测试),您需要在一个进程中创建多个 Sails 应用程序实例,则不应使用 require('sails')
返回的实例,因为这可能会导致意外行为。相反,您应该使用 Sails 构造函数获取应用程序实例
var Sails = require('sails').constructor;
var sails0 = new Sails();
var sails1 = new Sails();
var sails2 = new Sails();
每个应用实例 (sails0
、sails1
、sails2
) 都可以使用不同的配置单独加载/提升。
有关以编程方式使用 Sails 的更多信息,请参阅有关Sails 中的编程用法的概念概述。