Javascript 在SailsJs中同时开发restapi和服务器端渲染

Javascript 在SailsJs中同时开发restapi和服务器端渲染,javascript,node.js,angularjs,rest,sails.js,Javascript,Node.js,Angularjs,Rest,Sails.js,我期待着为nodeJs构建一个应用程序的框架 最初,我计划在sails中只构建一个restapi,并使用AngularJs管理前端,该API对于其他非浏览器应用程序也很有用。 但后来我意识到,由于angularJs是客户端数据绑定,我的站点可能不利于SEO和IE-8兼容 所以我现在想知道的是: 是否有可能开发一个使用服务器端(ejs)呈现的站点,并与之一起以最少的努力同时开发RESTAPI。如果我走这条路,人们应该记住什么 谢谢。这是完全可能的!看一看 一个标志,指示请求客户端是否喜欢JSON响

我期待着为nodeJs构建一个应用程序的框架

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

所以我现在想知道的是:

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


谢谢。

这是完全可能的!看一看

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

最好的一点是:

req.wantsJSON由所有in-Sail使用

这意味着您无需在服务器端执行任何操作即可使其正常工作

您只需创建与操作相对应的视图(通常为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(您可以在浏览器开发人员工具的网络部分的响应头中检查内容类型头值)

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

如果在浏览器中刷新页面,应该可以看到视图中的内容(基本上没有)。因此,让我们创建“find”视图,其中包含产品列表

<ul>
    <% _.each(data, function (product) { %>
    <li><%= product.name %></li>
    <% }) %>
</ul>
在浏览器中,您应该具有以下内容:

  • 蓝色椅子
  • 红桌子
  • 黄锤
现在,如何获取其他客户端应用程序的JSON数据?只需给出正确的HTTP头

如req.wantsJSON文档所述

如果此请求具有“json”内容类型,并且还设置了“Accept”头

您必须在HTTP请求中设置“内容类型”和“接受”头。通过测试,我发现“Accept”头就足够了。因此,您只需将这些值中的一个设置到此标题:

  • 如果需要json,请使用“application/json”
  • “text/html”如果您想要查看
就这样



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

哇,谢谢你这么完整的解释。!没问题,很高兴我能帮忙!