TypeError:对象{...}没有方法'find'-当将mongoose与express一起使用时

双打

我在使用带有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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

jQuery:对象#<Document>没有方法'find'

TypeError:对象#<Object>没有方法

有没有一种方法可以打印对象的所有方法?

未捕获的TypeError:对象#<Object>没有方法'Sin'

TypeError:对象#<ServerResponse>没有方法'send'

未捕获的TypeError:对象#<HTMLLIElement>没有方法'has'

AngularJS-TypeError:对象#<Scope>没有方法'path'

TypeError:对象#<Server>没有方法'connect'

Socket.IO:TypeError:对象没有方法包

AngularJS:TypeError:对象#<Object>没有方法'replace'

TypeError:对象#<Object>没有方法'Schema'

未捕获的TypeError:对象没有方法“打开”

未捕获的TypeError:对象#<HTMLDivElement>没有方法'bind'

未捕获的TypeError:对象#<Element>没有方法'getPosition'

未捕获的TypeError:对象x没有方法'css'

TypeError:对象#<Object>没有方法'save'

引导程序:使用bootstrap-tabs时,“ TypeError undefined不是函数” /“没有方法'tab'

将oauth2client与Google日历一起使用时,'AttributeError:'module'对象没有属性'file'

当我将 ngFor 与 json 对象一起使用时,我没有得到输出文件

使用猫鼬时出现错误“对象没有方法xxx”

使用Gulp + Browserify时对象#<Readable>没有方法'write'

对象没有方法“实时”-jQuery

对象#<Promise>没有方法'limit'

空对象没有方法[] =

对象没有方法'appendChild'

对象#<Promise>没有方法'catch'

对象#<HTMLDivElement>没有方法'show'

对象#<MongoClient>没有方法'open'

对象没有方法拆分