我对Node JS比较陌生-搜索了大量资源,花了超过一天的时间-没运气。
我有一个使用Mongoose模型,Routes和Controllers的普通NodeJS应用程序。
以下是我的模型以及如何在Controller中创建新对象。
如何使用原型功能分配ReservationNumber的值?假设一位客人住在度假酒店,并且正在预订SPA程序。所有SPA预订均应附有度假酒店预订号(此客人唯一)。
// MODEL TO BOOK SPA PROCEDURE FOR A HOTEL GUEST
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Users_BookingSchema = new Schema({
bookingname: {type: String, required: true, unique: true, min: 3, max: 100},
// reservationNumber: {type: String}, // NEEDS TO BE ASSIGNED USING PROTOTYPE
starttime: {type: Date, required: true},
endtime : {type: Date, required: true}
});
Users_BookingSchema
.virtual('url')
.get(function () {
return '/users_booking/'+this._id;
});
module.exports = mongoose.model('Users_Booking', Users_BookingSchema);
和从控制器:
// PART OF FUNCTION SAVING HOTEL SPA PROCEDURE BOOKING - create on POST
var sbt = new Users_Booking({
bookingname : req.body.bname,
starttime : jsDateStart, // PARSED DATE IS ASSIGNED
endtime : jsDateEnd // PARSED DATE IS ASSIGNED
// could add code below here - but trying to use prototype
});
我知道我可以将以下代码添加到Controller中的上述摘录中
let resNumb = getReservationNumber();
reservationNumber: resNumb;
但我正在尝试学习如何应用原型来实现这一目标:
我认为不需要为Users_Booking定义模型文件,请添加以下功能
Users_Booking.prototype.reservationNumber = function() {
return "4236"; // ASSUME THIS RETURNS RESERVATION NUMBER UNIQUE TO GUEST BEFORE MAKING A SPA PROCEDURE BOOKING
}
我的方向正确吗?
最佳答案
有趣的主意。使用从猫鼬创建的Users_Booking类,您现在可以使用猫鼬的类功能(在mongoose文档中描述的所有方法)和Object()(JavaScript基本原型)来引用Users_Booking。两者都继承到Users_Booking。这是一些证明:
const Users_Booking = mongoose.model('Users_Booking', Users_Booking_Schema);
console.log(Users_Booking.__proto__); // outputs all of the native mongoose methods
console.log(Object().__proto__.isPrototypeOf(Users_Booking.__proto__.__proto__)); // 'true'
如果您想与所有getReservationNumber()函数一起添加,则绝对可以。我更喜欢这样:
const Users_Booking = module.exports = mongoose.model(/* ... */);
。在此导出/定义下,您可以定义其他实用程序方法,以在导入Users_Booking时将其伴随。类似于以下代码:const mongoose = require('mongoose');
// ... definition of Users_Booking_Schema ...
const Users_Booking = module.exports = mongoose.model('Users_Booking', Users_Booking_Schema);
module.exports.generateUniqueReservationNumber() {
// generate a unique booking id
return booking_uid;
}
// ... any other utility functions ...
无需弄乱原型。将Users_Booking作为其自己的集合引用,您可以仅在其定义/导出下面的同一文件中附加功能。这样,您可以将代码封装起来,而无需弄乱原型。
因此,可以,可以将原型附加到原型上(始终建议进行测试)。我相信上述方法将更好地满足您程序的需求。