我有一些Mongoose代码在NodeJS上运行失败.
相关的行是:
// get data from database
const existingUser = await User.findOne({ userId });
userId
是一种"数字"类型.
console.log(typeof userId); // -> number
console.log(userId); // -> 1
该值从http请求的正文中获得,其中正文被编码为JSON.
因此,我并不惊讶地发现类型是"number",因为所有的JSON数字都是相同的(浮点数,没有整数),但我惊讶地发现这会导致错误,Mongoose无法将数字转换为整数类型.
在这里,请求由EXPRESS中定义的POST端点接收.
app.post("/test", async (request, response) => {
// get user id from body of request
console.log(request.body); // -> { userId: 1 }
const userId = request.body.userId;
// ...
我怎么才能解决这个问题呢?
准确的错误是:
CastError: Cast to ObjectId failed for value "1" (type number) at path "userId" for model "User"
reason: BSONError: input must be a 24 character hex string, 12 byte Uint8Array, or an integer
相关的模式是:
const user = new mongoose.Schema({
userId: {
type: mongoose.Types.ObjectId,
unique: true,
required: true,
},
});