我正在尝试从mongodb中获取和删除对象。但是我得到以下错误。
无法读取未定义的属性“ id”
我想通过Schema中的Id和Id获取对象只是因为我正在尝试使用nodejs和mongoDB进行gRPC,没有数据库时gRPC代码工作正常,但是在连接到数据库后,当我尝试跟踪错误时,它的抛出错误仅在nodejs中出现了上述错误,最后附加了测试代码。
注意:“插入和列出”工作正常。
这是我的猫鼬图式
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const todoSchema = new Schema({
id: {
type: Number,
required: true,
unique: true,
},
title: {
type: String,
required: "Enter title"
},
description: {
type: String,
required: "Enter Description"
},
done: {
type: Boolean,
default: false
},
createdate: {
type: Date,
default: new Date()
}
})
module.exports = mongoose.model('todo', todoSchema);
这是我的tododb代码
var todoModel = require('./models/todo')
var Todo = class {
constructor(payload) {
this.payload = payload;
}
static list(callback) {
todoModel.find({}, callback);
}
insert(callback) {
new todoModel(this.payload).save(callback);
}
get(callback) {
const condition = this.payload.condition;
todoModel.find(condition). exec(callback)
}
delete(callback) {
const condition = this.payload;
todoModel.remove(condition, callback);
}
};
module.exports = Todo;
测试代码在这里
var assert = {
get: function (call,callback) {
var payload = {
condition: {
id: call
}
};
var t = new TodoDb(payload);
t.get(callback);
},
};
try {
assert.get(40, callback);
console.log('Passed.');
} catch (error) {
console.log(error.message);
}
注2:我也是JS及其技术的初学者
答案 0 :(得分:1)
您正在执行的测试代码中:
assert.get(40);
assert.get使用参数调用= 40执行以下功能
function (call) {
var payload = {
condition: {
id: call.request.id
}
};
var t = new TodoDb(payload);
t.get(callback);
}
因此,如果call = 40,那么
的值是多少?call.request.id
通话= 40
call.request = 40.request =未定义
call.request.id = 40.request.id = undefined.id
给出错误:
无法读取未定义的属性“ id”
这意味着您正在尝试访问undefined
或null
对象上的属性ID
答案 1 :(得分:0)
这部分代码:
cy.Wait()
您打电话给var assert = {
get: function (call) {
var payload = {
condition: {
id: call.request.id
}
};
var t = new TodoDb(payload);
t.get(callback);
},
};
,而assert.get(40);
中的call
不是数字对象。
所以assert.get
和call=40
是call.request
。