gpt4 book ai didi

javascript - 如何从 meteor 方法正确返回响应和错误

转载 作者:行者123 更新时间:2023-11-29 17:48:23 25 4
gpt4 key购买 nike

我正在尝试从服务器端存在的 meteor 方法在客户端返回响应或错误。该方法本身用于在提交表单时向 API 提交发布请求,我希望在客户端能够返回 API 的响应,这样我就可以向用户发送信息,比如这个电子邮件地址已经存在。这是我目前所拥有的。

当我成功调用该方法时,我在 console.log(result); 客户端收到 201 响应,但我还想在 POST 时控制台记录错误提交给出 400 或任何错误。

server/main.js

Meteor.methods({
addSub(email) {

var emailAddress = {
"lists": [
{
"id": "1395617465"
}
],
"email_addresses": [
{
"email_address": email
}
]
}

HTTP.post('https://api.constantcontact.com/v2/contacts?api_key=<api-key>', {
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json'
},
data: emailAddress
}, function (error, response) {
if ( error ) {
console.log( error );
throwError = error;
} else {
console.log(response);
returnResponse = response;
}
});

return returnResponse;

}
});

client/main.js

Template.info.events({
'submit #cm-subscribe'(event){
event.preventDefault();
var form = event.target;
var email = form.email.value;
Meteor.call('addSub', email, (error, result) => {

console.log(result);

});
}
});

client/main.html

<template name="info">
<h2>Signup For Our Newsletter</h2>

<form id="cm-subscribe">

<input field name="email" type="email" value="email">

<input type="submit">
</form>

</template>

最佳答案

1) 您的代码当前包含竞争条件。 returnResponse 的值可能设置也可能不设置,具体取决于回调和返回语句之间的执行顺序。相反,您应该使用 Promises,它允许您以同步方式包装异步代码。有个好帖子on the Meteor blog关于如何做到这一点。请注意,这不会影响客户端行为 - 它仍会像您一样使用回调。

2) 您在客户端看不到错误的原因是 Meteor 有意将所有正常的 Javascript 错误(如 HTTP.post 返回的错误)转换为内部服务器错误以保护数据和源代码。您应该做的是处理服务器端的所有错误,并为预期的无效响应返回新的 Meteor.Error 对象。然后这些可以由客户端处理。对此的详尽解释可以在 Meteor Guide. 中找到。

像这样:

Meteor.methods({
addSub(email) {

return new Promise((resolve, reject) => {
HTTP.post('<URL>', ..., function(error, response){
if(!error){
resolve(response);
} else if (error == <Some Error Comparison>){
reject(new Meteor.Error("Email.subscription.invalidEmail", "You put in an invalid email"));
}
});
});
}
}

关于javascript - 如何从 meteor 方法正确返回响应和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46698138/

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