任何 Web 应用程序最基本的功能是能够解释发送到 URL 的请求,然后发送回响应。为了做到这一点,您的应用程序必须能够区分不同的 URL。
像大多数 Web 框架一样,Sails 提供了一个路由器:一种将 URL 映射到操作和视图的机制。路由是告诉 Sails 如何处理传入请求的规则。Sails 中主要有两种类型的路由:自定义(或“显式”)和自动(或“隐式”)。
Sails 允许您以任何您喜欢的方式设计应用程序的 URL - 框架没有限制。
每个 Sails 项目都附带 config/routes.js
,这是一个简单的 Node.js 模块,它导出一个包含自定义或“显式”路由的对象。例如,这个 routes.js
文件定义了六个路由;其中一些指向操作,而另一些则直接路由到视图
// config/routes.js
module.exports.routes = {
'GET /signup': { view: 'conversion/signup' },
'POST /signup': { action: 'entrance/signup' },
'GET /login': { view: 'portal/login' },
'POST /login': { action: 'entrance/login' },
'/logout': { action: 'account/logout' },
'GET /me': { action: 'account/profile' }
每个路由都包含左侧的地址(例如 'GET /me'
)和右侧的目标(例如 { action: 'account/profile' }
)。地址是一个 URL 路径,并且(可选)是一个特定的 HTTP 方法。目标可以使用多种不同的方式定义 (请参阅有关此主题的扩展概念部分),但上述语法是最常见的。当 Sails 收到传入请求时,它会检查所有自定义路由的地址以查找匹配项。如果找到匹配的路由,则请求将传递到其目标。
例如,我们可以将 'GET /me': { action: 'account/profile' }
理解为
"嘿 Sails,当您收到对
http://mydomain.com/me
的 GET 请求时,请运行account/profile
操作,好吗?"
您还可以指定路由本身内的视图布局
'GET /privacy': {
view: 'legal/privacy',
locals: {
layout: 'users'
}
},
function (req, res, next) {}
)。但是,您应该始终使用传统的 路由目标语法(如果可能),它可以简化开发,简化培训,并使您的应用程序更易于维护。除了您的自定义路由外,Sails 还会自动为您绑定许多路由。如果 URL 与自定义路由不匹配,它可能会与自动路由之一匹配,并且仍然会生成响应。Sails 中自动路由的主要类型是
如果没有任何自定义或自动路由与请求 URL 匹配,Sails 将返回默认的 404 响应。可以通过将 api/responses/notFound.js
文件添加到您的应用程序中来自定义此响应。有关更多信息,请参阅 自定义响应。
如果在处理请求期间(例如,在某些 操作代码 中)抛出未处理的错误,Sails 将返回默认的 500 响应。可以通过将 api/responses/serverError.js
文件添加到您的应用程序中来自定义此响应。有关更多信息,请参阅 自定义响应。
Sails 路由器是“协议无关的” - 它知道如何处理 HTTP 请求 和通过 WebSockets 发送的消息。它通过监听以简单格式发送到保留事件处理程序的 Socket.io 消息来实现这一点,这种格式称为 JWR(JSON-WebSocket 请求/响应)。此规范在 客户端套接字 SDK 中实现并开箱即用。
高级用户可以选择完全绕过路由器,并将低级、完全可自定义的 WebSocket 消息直接发送到底层的 Socket.io 服务器。您可以在应用程序的 onConnect
函数(位于 config/sockets.js
中)中直接绑定套接字事件,但请记住,在大多数情况下,您最好利用请求解释器进行套接字通信。在 HTTP 和 WebSockets 中维护一致的路由有助于保持应用程序的可维护性。