我正在学习Express教程。
我在尝试访问我的一个虚拟模型时出错。
我的型号:
const mongoose = require('mongoose');
const authorSchema = mongoose.Schema({
first_name: {type: String, required: true, maxlength: 100},
family_name: {type: String, required: true, maxlength: 100}
});
// virtual for author's full name:
authorSchema.virtual('name').get(
() => {
return `${this.first_name} ${this.family_name}`;
}
);
// Export model:
module.exports = mongoose.model('Author', authorSchema);
请求处理程序:
exports.get_author1 = (req,res, next) => {
Author.find().then(
(results) => {
res.end(results[0].name);
// "results" returns a list of objects (each object represent an author in my db) here I am accessing the first author object of the list and using the dot notation to access its 'name' virtual.
}
)
};
生成的答案是:未定义
在几个小时不明白我做错了什么之后,我把我的虚拟声明改为:
authorSchema.virtual('name').get(
function() {
return `${this.first_name} ${this.family_name}`;
}
);
使用function(({}而不是((=>{},现在得到了我想要的回应:Patrick Rothfuss。
我的问题是传统的匿名函数(function(((有什么区别{}(和箭头函数(((=>{}(,尤其是关于它们在声明虚拟时的使用?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions正如在MDN上所说,箭头函数不像传统函数那样绑定到this
。