这完全有可能!看看req.wantsJSON。
指示请求客户端是否更喜欢 JSON 响应的标志(相对于其他格式,如 XML 或 HTML。)
最好的一点是:
req.wantsJSON 被 Sails 中的所有 built-in custom responses 使用。
这意味着你不需要在服务器端做任何事情来让它工作!
您只需创建与操作对应的视图(通常是 find 或 findOne)并注意发送到 Sails 服务器的标头。
例如,让我们使用 Sails 命令行界面生成一个“api”(控制器/模型)
$ sails generate api product
现在让我们使用 Sails 控制台创建一些产品
$ sails console
sails> Product.create({name: 'Blue chair'}).exec(console.log)
undefined
sails> null { name: 'Blue chair',
createdAt: "2014-12-30T04:29:15.447Z",
updatedAt: "2014-12-30T04:29:15.447Z",
id: 1 }
sails> Product.create({name: 'Red table'}).exec(console.log)
undefined
sails> null { name: 'Red table',
createdAt: "2014-12-30T04:29:25.447Z",
updatedAt: "2014-12-30T04:29:25.447Z",
id: 2 }
sails> Product.create({name: 'Yellow hammer'}).exec(console.log)
undefined
sails> null { name: 'Yellow hammer',
createdAt: "2014-12-30T04:29:35.447Z",
updatedAt: "2014-12-30T04:29:35.447Z",
id: 3 }
如果你现在举起你的风帆应用程序并访问 http://localhost:1337/product,你应该有类似的东西
[
{
name: 'Blue chair',
createdAt: "2014-12-30T04:29:15.447Z",
updatedAt: "2014-12-30T04:29:15.447Z",
id: 1
},
{
name: 'Red table',
createdAt: "2014-12-30T04:29:25.447Z",
updatedAt: "2014-12-30T04:29:25.447Z",
id: 2
},
{
name: 'Yellow hammer',
createdAt: "2014-12-30T04:29:35.447Z",
updatedAt: "2014-12-30T04:29:35.447Z",
id: 3
}
]
什么是 JSON(您可以在浏览器开发者工具的“网络响应标头”部分检查 Content-Type 标头值)。
要将视图与资源关联,您需要在视图文件夹中创建一个以资源名称命名的文件夹,并创建以操作名称命名的文件(通常为 find 或 findOne)。
如果您在浏览器中刷新页面,您应该会看到视图中的内容(基本上什么都没有)。因此,让我们创建包含产品列表的“查找”视图
<ul>
<% _.each(data, function (product) { %>
<li><%= product.name %></li>
<% }) %>
</ul>
在您的浏览器中,您应该有类似的内容:
现在,您如何获取其他客户端应用程序的 JSON 数据?只需提供正确的 HTTP 标头即可。
如 req.wantsJSON 文档中所述
如果此请求具有“json”内容类型并且还设置了“Accept”标头
您必须在 HTTP 请求中同时设置“Content-Type”和“Accept”标头。通过测试,我发现“Accept”标题就足够了。所以你只需要设置一个这些值到这个标题:
- "application/json" 如果你想要 JSON
- “text/html”如果你想要你的视图
就是这样!
我希望我没有忘记任何事情。如果您需要更高的精度,请不要犹豫!