Javascript 铁:路由器&x2B;流星罐';t将POST数据添加到数据库和渲染路由
我正在用Meteor编写一个应用程序,它需要从POST请求中获取数据,并在相同的路径上呈现一个成功页面。这是我的/提交路线的当前代码:Javascript 铁:路由器&x2B;流星罐';t将POST数据添加到数据库和渲染路由,javascript,post,meteor,url-routing,iron-router,Javascript,Post,Meteor,Url Routing,Iron Router,我正在用Meteor编写一个应用程序,它需要从POST请求中获取数据,并在相同的路径上呈现一个成功页面。这是我的/提交路线的当前代码: Router.route('/submit', function() { Records.insert({ testValue: 'The Value', importantVal: this.request.body.email, createdAt: new Date() }); th
Router.route('/submit', function() {
Records.insert({
testValue: 'The Value',
importantVal: this.request.body.email,
createdAt: new Date()
});
this.render('success');
}, {where: 'server'});
当我运行这段代码时,数据被插入到记录数据库中,但它从未呈现成功模板。当我转到/submit路径时,它只会永远加载,而不会在页面上显示任何内容。当我去掉{where:'server'}时,它将呈现模板,但不会将数据添加到数据库中
如何获得要添加的数据和要呈现的模板?请在
iClient
和iServer
之外尝试此操作
Router.route('/submit', {
template: 'success',
onBeforeAction: function(){
Records.insert({
testValue: 'The Value',
importantVal: $('[name=email]').val(),//email from input field with name="email"
createdAt: new Date()
});
}
});
问题是,要将数据发布到路由,必须在服务器上运行,并且不能从服务器路由呈现客户端模板。解决此问题的一种方法是使用
302
重定向返回客户端,如下所示(代码是coffeescript):
服务器
路由接收已发布的数据,并在重定向到客户端
路由之前对其进行操作。客户端
路由的名称用于标识要呈现的模板。这给了我在将{where:'server'}添加到路由之前的相同错误:异步函数回调中的异常:TypeError:无法读取未定义的请求的属性“email”
没有正文
属性。。如果该电子邮件是由用户输入的,您可以首先获取电子邮件importantVal:$('[name=email]').val()
我从Meteor服务器的单独服务器获取数据,需要通过POST请求获取数据。我无法在客户端上运行jQuery代码,因为表单位于单独的域上。运行此代码会导致错误,因为它的结构方式(不是将路由括在括号中…)。通过将呈现更改为this.response.writeHead(302,{'Location':'/success'}),尝试重构此代码以使用当前代码;this.response.end();为/success添加新的路径似乎并不能解决我的问题。实际上,这似乎是由于我忘记了此.response.end()结尾的括号造成的;谢谢你的帮助!很抱歉缺少括号等,我忘了提到代码在coffeescript中,我已经在回答中修复了这个问题。
Router.route '/submit', where: 'server'
.post ->
Records.insert
testValue: 'The Value'
importantVal: @request.body.email
createdAt: new Date()
@response.writeHead 302, 'Location': '/success'
@response.end()
Router.route '/success', name:'success'