javascript - 用于 Emberjs 的 Nodejs 的 RESTful API

标签 javascript node.js rest ember.js coffeescript

我正在尝试在 Nodejs 中实现 RESTful API 服务器,将数据公开给 Emberjs 应用程序。目前我已经创建了前端,我相信我能够与服务器通信,成功地请求并接收来自服务器的数据,但是 Ember 向我抛出了我不理解的错误,更重要的是无法解决。

到目前为止我的代码如下(在coffeescript中):

window.Portal = Ember.Application.create
    LOG_TRANSITIONS: true
    LOG_TRANSITIONS_INTERNAL: true
    rootElement: '#application'

class Portal.ApplicationSerializer extends DS.RESTSerializer
    primaryKey: "_id"

class Portal.ApplicationAdapter extends DS.RESTAdapter
    namespace: 'api/v1'

Portal.Router.map ->
    @resource 'events', ->
        @resource 'event', path: '/:event_id', ->
            @route 'edit'
        @route 'since_date', path: '/:since_date'
        @route 'create'

    @resource 'logs', ->
        @resource 'log', path: '/:log_id', ->
            @route 'comment'
        @route 'since_date', path: '/:since_date'

    @route 'dashboard', path: '/'
    @route 'settings'
    @route 'login'
    @route 'logout'

    @route 'missing', path: '/*path'

class Portal.LogsRoute extends Ember.Route
    model: ->
        @store.find 'log'

class Portal.Log extends DS.Model
    name: DS.attr 'string'
    created: DS.attr 'date'
    modified: DS.attr 'date'

Portal.LogsController = Ember.ArrayController.extend
    sortProperties: ['created']
    sortAscending: true

    logsCount: (->
        @get "model.length"
    ).property "@each"

我会发布 JS,但它很困惑。无论如何,对于 API,我已经制作了一些应该返回到 Emberjs 应用程序的示例数据

#
# Logs Routes
#
module.exports = (app) ->
    app.namespace '/v1', ->
        app.get '/logs', (req, res) ->
            res.json "logs": [ { "_id": 1, "name": "name1", "created": "2013-02-07T16:44:57.000Z", "modified": "2013-02-07T16:44:57.000Z" }, { "_id": 2, "name": "name2", "created": "2013-02-07T16:44:57.000Z", "modified": "2013-02-07T16:44:57.000Z" } ]

        app.get '/logs/:id', (req, res) ->
            res.json "log": { "_id": 1, "name": "name2", "created": "2013-02-07T16:44:57.000Z", "modified": "2013-02-07T16:44:57.000Z" }

        app.post '/logs/:id/comment', (req, res) ->
            console.log "posted"

        app.delete '/logs/:id', (req, res) ->
            console.log "removed"

        app.delete '/logs', (req, res) ->
            console.log "removed"

查看 Chrome 开发人员工具中的网络选项卡会发现服务器已成功响应,并且响应预览中的数据看起来正确。但是 JS 控制台给出以下错误:

Error while loading route: TypeError {stack: (...), message: "Cannot call method 'forEach' of undefined"}
Uncaught TypeError: Cannot call method 'forEach' of undefined 

有人知道这可能是什么吗?

最佳答案

Ember 有自己的方式来扩展类。

您需要使用:

App.SomeController = Ember.ObjectController.extend()

而不是咖啡类声明:

class App.SomeController extends Ember.ObjectController

因此将您的代码更新为以下内容:

window.Portal = Ember.Application.create
    LOG_TRANSITIONS: true
    LOG_TRANSITIONS_INTERNAL: true
    rootElement: '#application'

Portal.ApplicationSerializer = DS.RESTSerializer.extend
    primaryKey: "_id"

Portal.ApplicationAdapter = DS.RESTAdapter.extend
    namespace: 'api/v1'

Portal.Router.map ->
    @resource 'events', ->
        @resource 'event', path: '/:event_id', ->
            @route 'edit'
        @route 'since_date', path: '/:since_date'
        @route 'create'

    @resource 'logs', ->
        @resource 'log', path: '/:log_id', ->
            @route 'comment'
        @route 'since_date', path: '/:since_date'

    @route 'dashboard', path: '/'
    @route 'settings'
    @route 'login'
    @route 'logout'

    @route 'missing', path: '/*path'

Portal.LogsRoute = Ember.Route.extend
    model: ->
        @store.find 'log'

Portal.Log = DS.Model.extend
    name: DS.attr 'string'
    created: DS.attr 'date'
    modified: DS.attr 'date'

Portal.LogsController = Ember.ArrayController.extend
    sortProperties: ['created']
    sortAscending: true

    logsCount: (->
        @get "model.length"
    ).property "@each"

希望对你有帮助

关于javascript - 用于 Emberjs 的 Nodejs 的 RESTful API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169221/

相关文章:

javascript - 检查网络服务器是否在线/离线

node.js - 在多个测试用例中使用 JWT token mocha node-js

java - Rally java rest API - 无法解析对象引用

java - 将 GET 和 POST 服务合并为一个?

javascript - Node Js 模块 async.series 不工作(在函数执行之前的函数之前)

python - Django-rest-framework中的可写嵌套序列化器?

javascript - 如何为一组在 Django 中创建的 for 循环中重复的 html 代码运行 JavaScript 代码?

javascript - 使用 XPath 获取两组元素

javascript - 如何确定视频是否刚刚完成使用 expo.video? ReactNative/Expo.io

javascript - 使用 ESLint 安装依赖项时出错,STDIN 未获取 key