meteor - 抛出 Meteor.Error 未到达客户端

标签 meteor

基本上,客户端使用 Meteor.call 调用服务器。然后,服务器方法会进行一些验证并使用 Meteor 包调用 Web 服务。如果验证失败并引发 meteor 错误,则会到达服务器。如果包响应有错误,则仅记录到服务器上。我需要错误才能到达客户端。

代码如下所示。

客户端

Meteor.call('callService', (err, result) => {
    if(err) {
       console.log(err.reason);
    }
});

服务器

Meteor.methods({
    'callService'(){
        if (!Meteor.user()) {
            // Error 1
            throw new Meteor.Error('insufficient-permissions', 'You need to login first');
        }
        // Using an meteor package to actually call the service
        package.callService(apiKey, (err, response) => {
            if (response.status === 'error') {
                 // Error 2
                  throw new Meteor.Error('service-error', response.message);
            }
        });
     },
});

在服务器方法中,如果在错误1处抛出错误,它确实会到达客户端,但错误2不会。 错误2仅登录服务器。

最佳答案

我猜你的package.callService()是异步的(假设它接受回调)。

在这种情况下,您的 Meteor 方法将启动异步任务,然后继续其进程并返回(因为没有更多指令),而异步任务仍在运行(实际上正在等待远程 Web 服务的响应)。因此,您的客户端 Meteor 调用的回调会收到“无错误”响应。

一旦发生“错误2”,Meteor调用就已经完成,错误只能记录在服务器上。

如果您想“挂起”您的方法,以便它等待 package.callService() 的结果来确定它是成功还是错误,并相应地完成 Meteor 调用,您可以尝试使用 Meteor.wrapAsync() .

顺便说一句,如果您确实使用同步任务来实际等待远程服务,您会对 this.unblock() 感兴趣。允许您的服务器处理其他任务(方法),而不仅仅是闲置。

关于meteor - 抛出 Meteor.Error 未到达客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690574/

相关文章:

javascript - Meteor Facebook 登录错误 Accounts.LoginCancelledError : No matching login attempt found

image - meteor Cordova 图像共享应用程序

meteor - Uncaught Error : No Iron. 布局已找到,因此您无法使用 yield

firefox - 为什么我的 meteor 应用程序在 firefox 上出现这些错误,而在其他浏览器上却没有?

debugging - Meteor:如何调试需要用户登录的 Meteor 方法

ubuntu - Docker:MeteorJS 安装了两次并出现一些警告

mongodb - 将本地主机 MongoDB 数据复制到 meteor 服务器

javascript - Google Maps Javascript API v3 不会在 meteor 项目中加载,net::ERR_BLOCKED_BY_CLIENT

javascript - 如何检查 Meteor Collection 中的 NotEquals/Exists?

javascript - 意外的 html 闭合标签meteor.js