MongooseとMongoDBを使用して親スキーマにサブドキュメントを追加しようとしていますが、次のエラーがスローされます。
TypeError: User is not a constructor
これは、 subdocuments に関するMongooseのドキュメントに基づいており、すべて同じだと思います。これをさらにデバッグするにはどうすればよいですか?
ルーター
// Add a destination to the DB
router.post('/add', function(req, res, next) {
let airport = req.body.destination
let month = req.body.month
let id = (req.user.id)
User.findById(id , function (err, User) {
if (err) return handleError(err)
function addToCart (airport, month, id) {
var user = new User ({
destinations: [(
airport = '',
month = ''
)]
})
dog.destinations[0].airport = airport
dog.destinations[0].month = month
dog.save(callback)
res.status(200).send('added')
}
addToCart()
})
console.log(airport)
})
スキーマ
var destinationSchema = new Schema({
airport: String,
month: String
})
// Define the scheme
var User = new Schema ({
firstName: {
type: String,
index: true
},
lastName: {
type: String,
index: true
},
email: {
type: String,
index: true
},
homeAirport: {
type: String,
index: true
},
destinations: [destinationSchema]
})
User.plugin(passportLocalMongoose)
module.exports = mongoose.model('User', User)
JavaScriptでは、変数名で大文字と小文字が区別されます。同じ名前のUser
モデルとUser
結果があります。
コードは次の変更で機能します:
User.findById(id , function (err, user) {
/* ^ use small `u` */
if (err) return handleError(err)
/* rest of your code */
また、コードのさらに先で、user
という名前の別の変数を宣言していることにも注意してください。それを別のものに変更する必要があります。