我需要维护一个Meteor项目,它基本上可以作为MongoDB数据库的入口数据。通过单击添加/更新按钮插入新记录时,会向服务器提交POST,并在MongoDB中创建新条目。到目前为止一切都很好。
POST /add_record HTTP/1.1 (application/x-www-form-urlencoded)
问题是,在没有任何用户操作的情况下,在两分钟后再次提交相同的POST,因此再次创建相同的记录。这种情况发生了三四次。 为什么这样,我怎么能避免呢?
服务器代码:
Records = new Meteor.Collection("records");
Meteor.startup(function() {
Meteor.publish('records', function() {
return Records.find()
});
});
Router.route('/add_record', function() {
if (this.request.method == 'POST') {
data = this.request.body;
Records.update({_id:data.id}, { created_at:(new Date()).getTime() , name:data.name, value:data.value}, {upsert:true});
}
},{where:'server'});
客户代码:
<head>
<title>Meteortest</title>
</head>
<body>
<div id="outer">
{{> meteortest}}
</div>
</body>
<template name="meteortest">
<div class="meteortest">
<div id="group">
<input type="hidden" id="record_id">
<input type="text" id='record_name'>
<input type="text" id="record_value">
<input type='button' id="add_record" value="Add/Update Record">
<table>
{{#each records}}
<tr>{{> record}}</tr>
{{/each}}
</table>
</div>
</div>
</template>
<template name="record">
<div class="record {{selected}}">
<td>{{name}}: {{value}}</td>
</div>
</template>
Records = new Meteor.Collection("records");
Router.route('/', function() {
this.render('');
});
Meteor.subscribe('records');
Template.meteortest.helpers({
records: function() {
return Records.find({}, {sort:{created_at:-1}})
}
});
Template.meteortest.rendered = function() {
$("#add_record").click(function() {
$.post("/add_record",
{id:$("#record_id").val(), name:$("#record_name").val(), value:$("#record_value").val() });
$("#record_name").val("");
$("#record_value").val("");
});
}