如何使用 mongoose 存储 javascript 错误对象?

THp*_*ubs 3 javascript mongoose mongodb

假设我们有一个像这样的错误对象:

const error = new Error('Error');
Run Code Online (Sandbox Code Playgroud)

我如何将它存储在 mongo 中?试图将其存储在类型为 Object 的字段中(甚至尝试过类型为 Mixed),但它只存储一个空的 Object。

const UserLogSchema = new Schema(
  {
    ...
    error: {
      type: Schema.Types.Mixed
    }
  },
  {
    timestamps: true
  }
);

const UserLog = mongoose.model('UserLog', UserLogSchema);
Run Code Online (Sandbox Code Playgroud)

添加错误:

const userLog = await UserLog.findOne({ _id: userLogID });

userLog.error = new Error('Error');

await userLog.save();
Run Code Online (Sandbox Code Playgroud)

当我们稍后尝试获取错误时:

const userLog = await UserLog.findOne({ _id: userLogID });

console.log(userLog.error)
Run Code Online (Sandbox Code Playgroud)

它只是打印{}. 但实际的错误不是空的。

jos*_*eir 6

序列化错误对象并存储为json字符串是否足够解决?

error = new Error('ahhhh');
errorJson = JSON.stringify(error, Object.getOwnPropertyNames(error));
console.log(errorJson);
// output: {"stack":"Error: ahhhh\n    at <anonymous>:1:7","message":"ahhhh"}
Run Code Online (Sandbox Code Playgroud)

在这里看到类似的问题,你也可以使用serialize-error包。