Javascript Nodejs和Expressjs-未定义变量
我有以下代码,但我得到一个错误,即未定义成员。因此,我尝试将Javascript Nodejs和Expressjs-未定义变量,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我有以下代码,但我得到一个错误,即未定义成员。因此,我尝试将/路由移动到db。有一次阻塞,但它只是停止,什么也不做 作为一个完全初学者在这个领域,我是适当的卡住,所以任何帮助将不胜感激 var express = require( 'express' ); var mongoose = require('mongoose'); var http = require( 'http' ); var path = require( 'path' ); var app = expre
/
路由移动到db。有一次阻塞,但它只是停止,什么也不做
作为一个完全初学者在这个领域,我是适当的卡住,所以任何帮助将不胜感激
var express = require( 'express' );
var mongoose = require('mongoose');
var http = require( 'http' );
var path = require( 'path' );
var app = express();
// all environments
app.set( 'port', process.env.PORT || 3001 );
app.use( express.logger( 'dev' ));
app.use( express.bodyParser());
app.use( express.json());
app.use( express.urlencoded());
app.use( express.methodOverride());
app.use( app.router );
// development only
if ( 'development' == app.get( 'env' )) {
app.use( express.errorHandler());
}
mongoose.connect('mongodb://localhost/dbname');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
var memberSchema = new mongoose.Schema({
name: String,
email: String
});
var Member = mongoose.model( 'Member', memberSchema );
});
//******ROUTES*******//
app.get('/', function(req, res){
Member.find(function(err, members) {
if (err) return console.error(err);
console.dir(members);
});
});
http.createServer( app ).listen( app.get( 'port' ), function(){
console.log( 'Express server listening on port ' + app.get( 'port' ));
} );
Member
只是回调函数中的一个局部变量。那么,在路由中使用它的最佳方法是什么呢?这是我不确定的一点。我试着在db内移动路由。正如我所说,有一次阻塞,但不确定这是否正确!(并且它不起作用)在db.once()
:var成员之前定义'Member'代码>。在回调函数中:Member=mongoose.model('Member',memberSchema)代码>。在路由处理程序中:if(Member){Member.find(…)}else{console.log('Member未定义');}代码>您真正遇到的是异步问题。打开数据库是异步的,您必须解决打开数据库,然后创建模型,然后处理路由的问题。在大多数情况下,只要在数据库打开之前不向服务器发送请求,就可以将成员变量移动到更高的作用域。@adeneo-如果我移动成员变量,那么架构将不得不跟随移动,在数据库中不留任何内容。一旦块-这可能不是一件坏事,但我不知道。标准是什么?