gpt4 book ai didi

javascript - 为什么当使用 Node Express 和 Backbone 获取请求时,我会得到用户集合和额外的对象?

转载 作者:行者123 更新时间:2023-11-28 19:59:09 24 4
gpt4 key购买 nike

此代码从数据库获取内容并将其发送回 Backbone 前端。当我控制台记录这些项目时,我得到了一个很好的数组,里面有我想要的对象。

Mongo 和 Node 与 Express:

app.get('/fighterslist', function(req, res) {
db.collection('userlist', function(err, collection) {
collection.find().toArray(function(err, items) {
console.log(items) // nice
res.send(items);
});
});
});

然后 Backbone 收集数据:

FightersListModel = Backbone.Model.extend ({
urlRoot: '/fighterslist',

initialize: function(){
var that = this;
this.fetch({
success: function (fightersList) {

console.log(fightersList); //unexpected results

that.set("fightersList", fightersList.toJSON());
}
});
},
});

上面代码中的日志显示了一个包含集合中所有行的对象,因此非常好。问题是它末尾有一个额外的对象,并且还包含一个包含集合中所有行的对象。

所以如果我 .toJSON() 它,它最后会有一个额外的空对象。这是控制台日志 console.log(fightersList.toJSON()):

Object {0: Object, 1: Object, 2: Object, 3: Object, 4: Object, fightersList: Object}
0: Object
1: Object
2: Object
3: Object
4: Object
fightersList: Object
__proto__: Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
arguments: null
caller: null
length: 1
name: "__lookupSetter__"
__proto__: function Empty() {}
<function scope>
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
get __proto__: function __proto__() { [native code] }
set __proto__: function __proto__() { [native code] }
__proto__: Object

为什么我会得到这个额外的对象?

最佳答案

首先,您要混合集合和模型。 mongo 代码返回一个集合(数组),而 FightersListModel 是一个 Backbone.Model 对象。您的意思可能是这样的:

var FightersListModel = Backbone.Model.extend({
url: '/fighterslist'
});
var FightersListCollection = Backbone.Collection.extend({
model: FightersListModel
});

var fightersListCollection = new FightersListCollection();
fightersListCollection.fetch();

*请注意,我无法测试上面的代码,这是对可能有效的粗略猜测

根据文档Backbone.Collection.fetch自动为您设置内容。您只需调用 fetch 即可。

您在日志中拥有额外的对象,因为在获取数据后,您手动将 fighterList 属性设置为 fightersList.toJSON()。这是不必要的。

关于javascript - 为什么当使用 Node Express 和 Backbone 获取请求时,我会得到用户集合和额外的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com