【发布时间】:2019-09-01 18:05:08
【问题描述】:
我在控制器文件的函数中定义了一个模式模型,该文件在 MongoDB 中创建了一个新集合。我希望模型在路由文件中传递。我曾尝试根据我的架构执行const Thing = mongoose.model('admin.companyName');,但出现错误:- throw new mongoose.Error.MissingSchemaError(name); MissingSchemaError: Schema hasn't been registered for model "admin.companyName".
Use mongoose.model(name, schema) on mongoose lib/ index file。
我在控制器内部的功能:-
admin.save((err, doc) =>{
if(!err){
res.send(doc);
//make copy to Company collection
let arr = Object.keys(doc.schema.obj); //doc.schema.paths if I need same ID
let Obj = {};
arr.map(key => Obj[key] = doc[key]);
var thingSchema = new mongoose.Schema({}, { strict: false, collection: admin.companyName });
var Thing = mongoose.model(admin.companyName , thingSchema);
var thing = new Thing(Obj);
thing.save();
console.log(thing);
我如何将 var Thing = mongoose.model(admin.companyName , thingSchema); 传递给我的路由文件,以便我可以在我的 route 之一中使用:-
注意:- admin.companyName 的架构名称不是固定的,并且会不断变化
const Thing = mongoose.model('admin.companyName');
Thing.updateOne( { emailResetTokenn: emailTokenn },{ $set: { verified: true }},(err) =>{ ......
编辑:- 路由文件
const express = require ('express');
const router = express.Router();
const mongoose = require ('mongoose');
const Admin = mongoose.model('Admin');
const Thing = mongoose.model('Thing');
const ctrlAdmin = require ('../controllers/admin.controller.js');
const jwt = require('jsonwebtoken');
router.get('/verify',function(req,res){
console.log('request recieved');
const emailTokenn = req.query.id;
console.log(emailTokenn);
Thing.updateOne( { emailResetTokenn: emailTokenn },{ $set: { verified: true }},(err) =>{
if(!err){
return res.redirect('https://localhost/something.com/fw18/index.html');
}
else{
throw err;
}
});
});
【问题讨论】:
-
猴子在你的快递应用上给模型打补丁并在你的路线示例中使用它们:
app.db = mongoose.schema...在你的路线中const model = app.db -
每次在控制器中调用
admin.save()时,都会创建一个新集合。所以Thing并不是真正的“常数”,它每次都指代具有不同模式的不同模型。如果这是你想要的,那很好。你在哪里导出你的Admin模型? -
@Marc 你的意思是说我必须在 server.js 文件中声明
app.db =mongoose.model(admin.companyName , thingSchema);? -
@MoadEnnagi 没错,你是对的。这就是我要的。我只在路由器文件
const Admin = mongoose.model('Admin');上导出我的Admin模型。代替Thing.. 在Admin.updateOne( { emailResetTokenn: emailTokenn },{ $set: { verified: true }},(err)之前是Admin -
req.object有任何Admin属性吗?作为router.get('/verify',function(req,res)中的请求对象,你得到了什么?