req.options
是一个包含应用程序操作中可用请求无关设置的字典(纯 JavaScript 对象)。
req.options
的目的是允许操作代码访问其配置的路由选项(如果有)。(简单来说,“路由选项”只是在 路由目标 中提供的任何附加属性。)
Sails 中的路由选项最初被设计为一种更灵活的方式来配置内置的蓝图操作。
某些特殊设置必须始终提供给 某些蓝图操作。这为您的应用程序提供了一种方法来传达蓝图操作应针对哪个模型/关联。例如,req.options.model
是特定蓝图操作应针对的模型的标识。对于直接涉及关联的蓝图操作,req.options.alias
指示关联属性的名称。
您可以在应用程序中利用这一点,以便将蓝图操作绑定到任意自定义路由。例如,请考虑 config/routes.js
中的以下自定义路由
'GET /foo/bar': {
action: 'user/find',
model: 'user'
}
每当到达对 /foo/bar 的 GET 请求时,find
蓝图操作将运行,并且 req.options.model
将作为 user
可用。(这就是内置的通用“find”蓝图操作如何知道它应该与 User 模型通信的方式。)
需要进一步自定义蓝图操作?在大多数情况下,最简单(也是最易于维护)的方法是编写自定义操作。如果您是第一次从蓝图 API 过渡到编写自己的自定义操作,您可以先查看 概念 > 操作与控制器。
请注意,存在一种中间方法,允许您以编程方式修改蓝图操作行为的某些其他方面,而无需完全覆盖它(例如,检查请求以确定蓝图操作在访问模型时使用的条件)。有关详细信息,请参阅 参考 > sails.config.blueprints > 使用 parseBlueprintOptions。
还可以配置和使用您自己的自定义路由选项。例如,假设您正在为 Sails 构建一个 GitHub 插件。为了提供对处理来自 GitHub 的 Webhook 请求的支持,您的插件可以注册一个通用的、可配置的操作,例如 github/receive-event
,该操作允许您的插件的任何用户轻松地将其绑定到其应用程序中的任何路由
'POST /my-cool-webhooks/github/doings-and-things/incoming': {
action: 'github/receive-event',
}
但是现在,假设您的插件的通用 receive-event
操作的目的之一是保存一个表示传入 GitHub 事件的记录到应用程序的数据库中(例如,为了将来使用而跟踪它)。为了做到这一点,您的通用操作需要知道要使用哪个模型。因此,使用与 Sails 的内置蓝图操作一致的简单方法,您的插件可以支持如下用法
'POST /my-cool-webhooks/github/doings-and-things/incoming': {
action: 'github/receive-event',
model: 'repoactivity'
}
同时,在您的插件中,您注册的操作可能如下所示
module.exports = function receiveEvent(req, res) {
if (_.isUndefined(req.options.model) || !sails.models[req.options.model]) {
return res.serverError(new Error('Invalid configuration: To use `github/receive-event`, please set this route's `model` to the identity of one of your app\'s models. (Currently, it is `'+req.options.model+'`, which cannot be used.)'));
}
var GitHubEventModel = sails.models[req.options.model];
GitHubEventModel.create({
raw: req.allParams(),
githubId: req.param('id'),
// ...
// ... etc. (see https://developer.github.com/webhooks/#events)
}).exec(function(err) {
if (err) { return res.serverError(err); }
return res.ok();
});
};
有关创建此类插件的更多信息,请参阅 概念 > 扩展 Sails > Hook。