在SailsJs中同时开发Rest API和服务器端渲染
Develop Rest API and server-side rendering simultaneously in SailsJs
我正在寻找用于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",如果您想要查看
就这样!
我希望我没有忘记什么。如果您需要更高的精度,请不要犹豫!
- 我可以将初始动态数据从基于RESTful api的服务器端传递到基于角度的前端页面吗
- 如何对用户隐藏Backbone中的服务器端API
- 在 express/node.js API 中进行高效的服务器端 JavaScript 内存管理
- 是否有一个好的基于服务器端JavaScript的rest API测试框架
- 在SailsJs中同时开发Rest API和服务器端渲染
- 服务器端ruby与客户端js-api的速度/组织
- REST API测量服务器端响应时间(性能)
- 使用服务器端代码从客户端提供的不可靠的API获取JSON输出,并以适当的格式在页面上呈现数据
- php cURL的替代品- OpenId和谷歌,Facebook api服务器端身份验证
- 表示堆栈控制器服务器端未连接到API
- 如果需要登录,如何在Node.js服务器端使用Mocha Chai测试RESTful CRUD api
- 谷歌地理编码API,从服务器端转移到客户端,问题
- Node / Express / Angular服务器端外部API请求
- 将服务器端c#转换为ASP.. NET Web API
- MVC服务器端VS MVC客户端和RESTful api
- 调用谷歌可视化API服务器端
- Instagram API和导入照片没有服务器端认证
- 如果域名被阻止,将API请求从js重定向到服务器端
- 如何在呈现页面之前在服务器端执行api请求
- 谷歌分析嵌入API服务器端授权定制图表