javascript - mongoose & ember,记录拒绝原因: typeerror

标签 javascript ember.js mongoose ember-data

我在回复中收到此类型错误,但我不知道 store.find('someThread') 需要什么格式。 这是我的 Ember 部分:

App.RestAdapter = DS.RESTAdapter.extend({
  url: 'http://mylocalhost:3000',
  namespace: 'api',

  serializer: DS.RESTSerializer.extend({
    primaryKey: function(type) {
        return '_id';
    }
  })
});

App.Store = DS.Store.extend({
  revision: 12,
  adapter: App.RestAdapter
});

App.VideoRoute = Ember.Route.extend({
  model: function() {
    console.log("video..", this.store.find('video'));
    return true;
  }
});

这是节点部分:

exports.list = function(req, res) {
  Video.find(function(err, videos) {
    var payload = { video: {name: "sampleName"}};
    return res.send(200, JSON.stringify(payload));
  });
}

这是响应的 console.log:

Class {constructor: function, reason: null, isPending: undefined, isSettled: undefined, isRejected: false…}
  __ember1385638132476: undefined
  __ember1385638132476_meta: Meta
  _super: undefined
  arrangedContent: (...)
  content: (...)
  isRejected: true
  reason: TypeError
  message: "Object function () {↵    if (!wasApplied) {↵  (...)"
  stack: (...)
  get stack: function () { [native code] }
  set stack: function () { [native code] }
  __proto__: Error
  __proto__: Object

如果我只发送一个字符串,我确实会得到响应: `res.send("something"); 但这只是在responseText中,并且isRejected是true,所以...

有什么想法吗?

更新

*这是 chop 的消息部分:*

"Object function () {
if (!wasApplied) {
  Class.proto(); // prepare prototype...
}
o_defineProperty(this, GUID_KEY, undefinedDescriptor);
o_defineProperty(this, '_super', undefinedDescriptor);
var m = meta(this), proto = m.proto;
m.proto = this;
if (initMixins) {
  // capture locally so we can clear the closed over variable
  var mixins = initMixins;
  initMixins = null;
  this.reopen.apply(this, mixins);
}
if (initProperties) {
  // capture locally so we can clear the closed over variable
  var props = initProperties;
  initProperties = null;

  var concatenatedProperties = this.concatenatedProperties;

  for (var i = 0, l = props.length; i < l; i++) {
    var properties = props[i];

    Ember.assert("Ember.Object.create no longer supports mixing in other definitions, use createWithMixins instead.", !(properties instanceof Ember.Mixin));

    if (properties === null || typeof properties !== 'object') {
      Ember.assert("Ember.Object.create only accepts objects.");
      continue;
    }

    var keyNames = Ember.keys(properties);
    for (var j = 0, ll = keyNames.length; j < ll; j++) {
      var keyName = keyNames[j];
      if (!properties.hasOwnProperty(keyName)) { continue; }

      var value = properties[keyName],
          IS_BINDING = Ember.IS_BINDING;

      if (IS_BINDING.test(keyName)) {
        var bindings = m.bindings;
        if (!bindings) {
          bindings = m.bindings = {};
        } else if (!m.hasOwnProperty('bindings')) {
          bindings = m.bindings = o_create(m.bindings);
        }
        bindings[keyName] = value;
      }

      var desc = m.descs[keyName];

      Ember.assert("Ember.Object.create no longer supports defining computed properties.", !(value instanceof Ember.ComputedProperty));
      Ember.assert("Ember.Object.create no longer supports defining methods that call _super.", !(typeof value === 'function' && value.toString().indexOf('._super') !== -1));
      Ember.assert("`actions` must be provided at extend time, not at create time, when Ember.ActionHandler is used (i.e. views, controllers & routes).", !((keyName === 'actions') && Ember.ActionHandler.detect(this)));

      if (concatenatedProperties && indexOf(concatenatedProperties, keyName) >= 0) {
        var baseValue = this[keyName];

        if (baseValue) {
          if ('function' === typeof baseValue.concat) {
            value = baseValue.concat(value);
          } else {
            value = Ember.makeArray(baseValue).concat(value);
          }
        } else {
          value = Ember.makeArray(value);
        }
      }

      if (desc) {
        desc.set(this, keyName, value);
      } else {
        if (typeof this.setUnknownProperty === 'function' && !(keyName in this)) {
          this.setUnknownProperty(keyName, value);
        } else if (MANDATORY_SETTER) {
          Ember.defineProperty(this, keyName, null, value); // setup mandatory setter
        } else {
          this[keyName] = value;
        }
      }
    }
  }
}
finishPartial(this, m);
this.init.apply(this, arguments);
m.proto = proto;
finishChains(this);
sendEvent(this, "init");
} has no method 'extract'"

更新2:

发现你可以覆盖ajax方法。现在,至少我知道,json正在成功函数上传输,但数据属性仍然未定义......

App.ApplicationAdapter = DS.RESTAdapter.extend({
  url: 'http://localhost:3000',
  namespace: 'api',

  ajax: function(url, type, hash) {
   var adapter;
   adapter = this;
   return new Ember.RSVP.Promise(function(resolve, reject) {
    var headers;
    hash = hash || {};
    hash.url = url;
    hash.type = type;
    hash.dataType = "json";
    hash.context = adapter;
    if (hash.data && type == "GET") {
      hash.contentType = "application/json; charset=utf-8";
      hash.data = JSON.stringify(hash.data);
    }
    if (adapter.headers !== undefined) {
      headers = adapter.headers;
      hash.beforeSend = function(xhr) {
        return forEach.call(Ember.keys(headers), function(key) {
          return xhr.setRequestHeader(key, headers[key]);
        });
      };
    }
    hash.success = function(json) {
      console.log("success", hash.data, json); //-> undefined, Object {video: Object}
      return Ember.run(null, resolve, json);
    };
    hash.error = function(jqXHR, textStatus, errorThrown) {
      return Ember.run(null, reject, adapter.ajaxError(jqXHR));
    };
    return Ember.$.ajax(hash);
  });
 },
});

最佳答案

如果您使用的是 ember-data 1.0.0-beta.x 版本,您需要声明您的适配器和序列化器,如下所示:

App.ApplicationSerializer = DS.RESTSerializer.extend({
  primaryKey: '_id'
});

App.ApplicationAdapter = DS.RESTAdapter.extend({
  url: 'http://mylocalhost:3000',
  namespace: 'api'
});

App.VideoRoute = Ember.Route.extend({
  model: function() {
    console.log("video..", this.store.find('video'));
    return true;
  }
});

有一个过渡指南 here ,这说明了 0.13 和 1.0.0-beta.x 版本之间的变化

关于javascript - mongoose & ember,记录拒绝原因: typeerror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20265662/

相关文章:

javascript - Computed.alias 不更新绑定(bind)属性

node.js - Mongoose 种群忽略选项

javascript - 5 秒后淡出 1 个 Div,然后淡入另一个 Div

javascript - Ember.js 初始化行为

javascript - 为什么我的 JavaScript 循环没有被输入?

javascript - Ember.js 中未定义的 TypeError 和 "Cannot call method ' connectOutlet'

node.js - 更新 mongoDB 中嵌套文档中的值

json - 如何仅在 Mongoose 中获取子文档?

javascript - Vue JS 观察深层嵌套对象

javascript - index.js.erb 未加载到 Rails 中