gpt4 book ai didi

使用 MongoDB 的 Node.js Express 路由

转载 作者:搜寻专家 更新时间:2023-10-31 23:49:37 25 4
gpt4 key购买 nike

下午好

我最近开始使用 Node.js + Express + MongoDB。我设置了一个简单的应用程序,其中包含:

/**
* Module dependencies.
*/

var express = require('express')
, routes = require('./routes')
, mongoose = require('mongoose')
, models = require('./models')
, Document
, db;

// lots of conf ...

models.defineModels(mongoose, function() {
app.Document = Document = mongoose.model('Document');
db = mongoose.connect(app.set('db-uri'));
})

// Routes

app.get('/', routes.home);
app.get('/documents.:format?', routes.list);

// classical end of app.js

我在“routes”文件夹中也有一个相应的“index.js”文件,其中包含:

exports.home = function(req, res){
res.render('index', { title: 'Indx' })
};

exports.list = function(req, res){
Document.find().all(function(documents) {
switch (req.params.format) {
case 'json':
res.send(documents.map(function(d) {
return d.__doc;
}));
break;
default:
res.render('index', { title: 'Indx' });
}
});
};

路由部分正常,这意味着当我将浏览器指向 localhost:3000 时,我看到了(生成的 Jade 模板)“索引” View 。当我指向 localhost:3000/documents 时,路由工作正常,并且代码正在尝试为我的“index.js”路由的“列表”部分提供服务。但是,我希望我在主应用程序中创建的“文档” Mongoose 模型能够在“index.js”中被识别,但显然情况并非如此,因为我不断收到以下错误:

Express
500 ReferenceError: Document is not defined
at C:\PERSO\DEV\indxjs\routes\index.js:23:2
at callbacks (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:272:11)
at param (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:246:11)
at param (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:243:11)
at pass (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:253:5)
at Router._dispatch (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:280:4)
at Object.handle (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:45:10)
at next (C:\PERSO\DEV\indxjs\node_modules\express\node_modules\connect\lib\http.js:204:15)
at Object.methodOverride [as handle] (C:\PERSO\DEV\indxjs\node_modules\express\node_modules\connect\lib\middleware\methodOverride.js:35:5)
at next (C:\PERSO\DEV\indxjs\node_modules\express\node_modules\connect\lib\http.js:204:15)

我显然可以从“app.js”中定义我的路由,比如:

app.get('/documents.:format?', loadUser, function(req, res) {
// ...
}

但有谁能找到一种与 mongoose 交谈的方式,同时保留优雅的“./routes/index.js”与“app.js”的分离?

非常感谢

编辑:根据 Wes 的友善回答,我将以下代码添加到“index.js”中:

var Document;
function defineRoutes(mongoose, fn) {
Document = mongoose.model('Document');
fn();
}
exports.defineRoutes = defineRoutes;
// then the same as in initial post

我在“app.js”的这个函数中包含了路由定义:

routes.defineRoutes(mongoose, function() {
app.get('/', routes.home);
app.get('/documents.:format?', routes.list);
})

当我指向 localhost:3000 时一切正常,但是当我指向/documents 时,浏览器一直在加载、加载...

最佳答案

感谢 Wes Johnson,我找到了出路。我盲目地遵循过时的教程,该教程使用了 MongoDb 中已弃用的方法。下面是我最终用来实现“列表文档”功能的代码片段:

exports.list = function(req, res){
Document.find({},function(err, documents) {
switch (req.params.format) {
case 'json':
res.send(documents.map(function(d) {
return d.toObject();
}));
break;
default:
res.render('index', { title: 'Indx' });
}
});
};

再次感谢韦斯!

关于使用 MongoDB 的 Node.js Express 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com