Express와 함께 몽구스 스키마를 사용하여 MongoDB에서 데이터를 가져 오는 데 문제가 있습니다. 처음에는 단일 파일 (mongoosetest.js)에서 mongoose로 테스트했는데 제대로 작동합니다. 그러나 모든 것을 익스프레스 경로와 구성 파일로 나누기 시작하면 상황이 깨지기 시작합니다. 나는 그것이 단순한 것이라고 확신하지만 지난 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] 삭제
몇 마디 만하겠습니다