React + Backbone 应用程序生成 2 个 POSTS 而不是 1 个
React + Backbone application making 2 POSTS instead of 1
我有一个用 React 和 Backbone 实现的 restful 待办事项列表。
目前,我不是在与数据库对话;在我的 server.js.
中只有一个数组 var mytodos = [];
这是 POST 的服务器代码(使用 Express):
app.post('/todos', function(req, res) {
var todo = {
id: mytodos.length,
title: req.body.length,
completed: req.body.completed
};
mytodos.push(todo);
console.log('POST ' + JSON.stringify(todo));
res.send(todo);
});
当我向列表中添加一个项目时,我看到出于某种原因生成了两个 POSTS。
POST: {"id":0,"title":"test","completed":false}
POST: {"id":1,"title":"test","completed":false}
在 Chrome 开发中。模式,我看到了:
PUT localhost/todos/0 404 (Not Found)
PUT localhost/todos/1 404 (Not Found)
两个 PUT 请求!
试图通过它推理 - save()
被调用而调用 sync()
。由于该模型还没有 id
(只有 cid
),它发出 POST 请求并将待办事项 (id = 0) 添加到 mytodos
然后更新客户端上的模型(添加 id
属性)。由于检测到更改,它会执行另一个 save()
将其放入服务器(<-- 这里很可能是错误的;不确定更新后的模型是否会导致 PUT)。
这或许可以解释 PUT,但不能解释双重 POST。
这里是 save()
被调用的地方(在 TodoApp = React.createClass...
:
componentDidUpdate: function() {
this.props.todos.forEach(function(todo) {
console.log('componentDidUpdate: ' + todo.id); // logs: undefined, 0, 1
todo.save();
});
},
...
save: function(todo, text) {
console.log('Save: ' + todo.id); // only logged on update
todo.save({title: text});
this.setState({editing: null});
},
...
}
为什么会这样?
为什么除了 POST
ing 之外还有 PUT
ting?为什么要执行两次?
编辑:
我通过将 create
更改为 add
- 来解决双重 POST 我得到帮助的地方。
最后一个问题是 PUT 404 (Not Found)
一个肯定在服务器上的项目。有趣的是,PUT
似乎没有通过我的服务器。我的服务器只记录 POST
。 PUT
正在其他地方记录。
我有一个用 React 和 Backbone 实现的 restful 待办事项列表。
目前,我不是在与数据库对话;在我的 server.js.
中只有一个数组 var mytodos = [];
这是 POST 的服务器代码(使用 Express):
app.post('/todos', function(req, res) {
var todo = {
id: mytodos.length,
title: req.body.length,
completed: req.body.completed
};
mytodos.push(todo);
console.log('POST ' + JSON.stringify(todo));
res.send(todo);
});
当我向列表中添加一个项目时,我看到出于某种原因生成了两个 POSTS。
POST: {"id":0,"title":"test","completed":false}
POST: {"id":1,"title":"test","completed":false}
在 Chrome 开发中。模式,我看到了:
PUT localhost/todos/0 404 (Not Found)
PUT localhost/todos/1 404 (Not Found)
两个 PUT 请求!
试图通过它推理 - save()
被调用而调用 sync()
。由于该模型还没有 id
(只有 cid
),它发出 POST 请求并将待办事项 (id = 0) 添加到 mytodos
然后更新客户端上的模型(添加 id
属性)。由于检测到更改,它会执行另一个 save()
将其放入服务器(<-- 这里很可能是错误的;不确定更新后的模型是否会导致 PUT)。
这或许可以解释 PUT,但不能解释双重 POST。
这里是 save()
被调用的地方(在 TodoApp = React.createClass...
:
componentDidUpdate: function() {
this.props.todos.forEach(function(todo) {
console.log('componentDidUpdate: ' + todo.id); // logs: undefined, 0, 1
todo.save();
});
},
...
save: function(todo, text) {
console.log('Save: ' + todo.id); // only logged on update
todo.save({title: text});
this.setState({editing: null});
},
...
}
为什么会这样?
为什么除了 POST
ing 之外还有 PUT
ting?为什么要执行两次?
编辑:
我通过将 create
更改为 add
-
最后一个问题是 PUT 404 (Not Found)
一个肯定在服务器上的项目。有趣的是,PUT
似乎没有通过我的服务器。我的服务器只记录 POST
。 PUT
正在其他地方记录。