在SailsJs中同时开发Rest API和服务器端渲染

Develop Rest API and server-side rendering simultaneously in SailsJs

本文关键字:API 服务器端 Rest 开发 SailsJs      更新时间:2023-09-26

我正在寻找用于nodeJ构建应用程序的SailsJs框架。

最初,我计划只在sails中构建一个REST API,并使用AngularJs管理Front-End,API对其他非浏览器应用程序也很有用。但后来我意识到,由于angularJs是客户端数据绑定,我的网站可能不适合SEO和IE-8。

所以我现在想知道的是:

是否可以开发一个使用服务器端(ejs)渲染的站点,并与之一起,以最少的精力同时开发REST API。如果我走这条路,人们应该记住什么

谢谢。

这是完全可能的!看看req.wantsJSON.

一个标志,指示请求客户端是否更喜欢JSON响应(而不是其他格式,如XML或HTML)

最好的一点是:

req.wantsJSON由Sails中的所有内置自定义响应使用。

这意味着你无需在服务器端做任何事情就能让它工作!

您只需要创建与操作相对应的视图(通常是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 }

如果你现在启动你的sails应用程序并访问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(您可以在浏览器Developer Tools的"网络"部分的"响应标头"中检查"内容类型"标头值)。

要将视图与资源关联,您需要在视图文件夹中创建一个以资源名称命名的文件夹,并创建以操作名称命名的文件(通常为find或findOne)。

如果你在浏览器中刷新页面,你应该看到你的视图中有什么(基本上什么都没有)。因此,让我们创建包含产品列表的"查找"视图

<ul>
    <% _.each(data, function (product) { %>
    <li><%= product.name %></li>
    <% }) %>
</ul>

在你的浏览器中,你应该有这样的东西:

  • 蓝色椅子
  • 红色桌子
  • 黄色锤子

现在,如何获取其他客户端应用程序的JSON数据?只需提供正确的HTTP标头。

如req.wantsJSON文档中所述

如果此请求具有"json"内容类型,并且还具有其"Accept"标头集

您必须在HTTP请求中设置"内容类型"answers"接受"标头。通过测试,我发现"Accept"标头就足够了。所以你只需要为这个标题设置一个这样的值:

  • 如果您想要json,请使用"application/json"
  • "text/html",如果您想要查看

就这样!


我希望我没有忘记什么。如果您需要更高的精度,请不要犹豫!