【问题标题】:Develop Rest API and server-side rendering simultaneously in SailsJs在 SailsJs 中同时开发 Rest API 和服务端渲染
【发布时间】:2014-12-30 22:52:17
【问题描述】:

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

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

所以我现在想知道的是:

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

谢谢。

【问题讨论】:

    标签: javascript node.js angularjs rest sails.js


    【解决方案1】:

    这完全有可能!看看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”如果你想要你的视图

    就是这样!


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

    【讨论】:

    • 哇! , 谢谢你这么完整的解释。!
    • 没问题,很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2016-11-29
    • 2015-05-07
    相关资源
    最近更新 更多