【发布时间】:2014-08-02 01:41:13
【问题描述】:
我在使用带有 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) 可以按预期工作,因此我试图组织我的代码可能很愚蠢。谢谢。
【问题讨论】: