我对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作为其自己的集合引用,您可以仅在其定义/导出下面的同一文件中附加功能。这样,您可以将代码封装起来,而无需弄乱原型。

因此,可以,可以将原型附加到原型上(始终建议进行测试)。我相信上述方法将更好地满足您程序的需求。

07-24 17:37
查看更多