我在使用带有express的Mongoose模式从MongoDB获取数据时遇到麻烦。我首先在一个文件(mongoosetest.js)中仅对猫鼬进行了测试,并且工作正常。但是,当我开始用快速路由和配置文件将其全部分割时,事情开始崩溃。我敢肯定这很简单,但是我花了最后3个小时在谷歌上搜索,试图找出我做错了什么,并且找不到与我的过程足够匹配的东西来进行比较。
mongoosetest.js(这很好,但不适用于我的应用程序)
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/meanstack');
var db = mongoose.connection;
var userSchema = mongoose.Schema({
name: String
}, {collection: 'users'});
var User = mongoose.model('User', userSchema);
User.find(function(err, users) {
console.log(users);
});
这些文件是我遇到问题的地方。我敢肯定这是愚蠢的,可能是使用外部文件,导出和需求的直接结果。我的server.js文件刚刚启动并配置了express。我也有一个路由文件和一个db配置文件。
路由文件(allRoutes.js)
var express = require('express');
var router = express.Router();
var db = require('../config/db');
var User = db.User();
// routes
router.get('/user/list', function(req, res) {
User.find(function(err, users) {
console.log(users);
});
});
// catch-all route
router.get('*', function(req, res) {
res.sendfile('./public/index.html');
});
module.exports = router;
dbconfig文件(db.js)
var mongoose = require('mongoose');
var dbHost = 'localhost';
var dbName = 'meanstack';
var db = mongoose.createConnection(dbHost, dbName);
var Schema = mongoose.Schema, ObjectId = Schema.ObjectId;
db.once('open', function callback() {
console.log('connected');
});
// schemas
var User = new Schema({
name : String
}, {collection: 'users'});
// models
mongoose.model('User', User);
var User = mongoose.model('User');
//exports
module.exports.User = User;
浏览到localhost:3000 / user / list时收到以下错误
TypeError: Object { _id: 5398bed35473f98c494168a3 } has no method 'find' at
Object.module.exports [as handle] (C:\...\routes\allRoutes.js:8:8) at next_layer
(C:\...\node_modules\express\lib\router\route.js:103:13) at Route.dispatch
(C:\...\node_modules\express\lib\router\route.js:107:5) at
C:\...\node_modules\express\lib\router\index.js:213:24 at Function.proto.process_params
(C:\...\node_modules\express\lib\router\index.js:284:12) at next
(C:\...\node_modules\express\lib\router\index.js:207:19) at Function.proto.handle
(C:\...\node_modules\express\lib\router\index.js:154:3) at Layer.router
(C:\...\node_modules\express\lib\router\index.js:24:12) at trim_prefix
(C:\...\node_modules\express\lib\router\index.js:255:15) at
C:\...\node_modules\express\lib\router\index.js:216:9
就像我说的那样,由于我的单个文件(mongoosetest.js)可以正常工作,所以我试图组织代码可能很愚蠢。谢谢。
我想到了。
显然,db.once('open'...与mongoose.connect不同。将dbconfig.js文件切换到以下文件,一切都很好(在var User = db.User;中,在allRoutes.js中使用Aaron Dufour建议)。
var mongoose = require('mongoose');
var Schema = mongoose.Schema, ObjectId = Schema.ObjectId;
mongoose.connect('mongodb://localhost/meanstack');
// schemas
var User = new Schema({
name : String
}, {collection: 'users'});
// models
mongoose.model('User', User);
//exports
module.exports.User = mongoose.model('User');
编辑:不能将其标记为2天的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句