node.js - 抛出异常时无法设置未定义的“名称”
问题描述
我只是在 nodejs 中尝试 Apache Thrift,然后在我即将到来的项目中使用它,其中我遇到了这个错误。
这是我的demo.thrift
文件
namespace js demo
typedef i32 int
enum Operation {
ADD = 1,
SUBTRACT = 2,
MULTIPLY = 3,
DIVIDE = 4
}
struct Work {
1: int num1 = 0,
2: int num2,
3: Operation op,
4: optional string comment
}
exception InvalidOperation {
1: int message,
2: string trace
}
service Calculator {
void ping()
double calculate(1: int logid, 2: Work w) throws (1: InvalidOperation oops),
oneway void zip()
}
这里是一部分server.js
我使用 switch case 来确定操作server.js
// inside thrift.createServer
calculate: (logid, work, result) => {
let answer = null, oops = null;
switch(work.op) {
// Code related to Operation.ADD, Operation.SUBTRACT ...
default: {
console.log("ERROR!");
oops = InvalidOperation();
oops.message = work.op;
oops.trace = "Unknown Operation";
}
}
result(oops, answer);
}
当client.js
调用服务器时calculate(12345, { num1:1, num2:2, op: 10 })
它不是返回错误而是抛出
TypeError: Cannot set property 'name' of undefined in demo_types.js:122
中与 InvalidOperation 相关的部分demo_types.js
是
// Work related code
var InvalidOperation = module.exports.InvalidOperation = function(args) {
Thrift.TException.call(this, "InvalidOperation");
this.name = "InvalidOperation"; // points to here
this.message = null;
this.trace = null;
if (args) {
if (args.message !== undefined && args.message !== null) {
this.message = args.message;
}
if (args.trace !== undefined && args.trace !== null) {
this.trace = args.trace;
}
}
};
Thrift.inherits(InvalidOperation, Thrift.TException);
InvalidOperation.prototype.name = 'InvalidOperation';
// InvalidOperation.read & .write
知道为什么会抛出错误吗?
解决方案
实际上我意识到为什么会抛出这个错误。这是一个普通的旧 Javascript 错误。
oops = new InvalidOperation();
而已。
推荐阅读
- linux - ping 测试 if-else 案例
- java - 通过套接字(android)连接到我附近的所有手机
- docker - Docker启用了用户名空间,容器开始失败
- php - 通过 PHP Api 脚本接收 GET 请求中的值数组
- java - 如何从 Mouseevents 中隐藏 JComponent 的一部分?例如,JButton 的某些区域没有反应,休息很好
- java - 我的警报管理器无法在后台运行
- arrays - 使用 postgres 中的 json_array_elements 将 json 数组值转换为多行
- apache - apache: Forbidden 你没有权限访问,连文件夹都有权限
- c++ - 优化循环
- android - 小米商店应用的页面意图是什么?