我正在创建一个节点应用,我正在关注nodepad example来创建我的用户。但是,当我尝试打开我的/注册页面时,我正在尝试进行路由分离并遇到问题。
我的app.js文件看起来像这样:
var express = require('express'),
app = express(),
users = require('./routes/users'),
http = require('http'),
path = require('path'),
mongoose = require('mongoose'),
mongoStore = require('connect-mongodb'),
util = require('util'),
models = require('./models'),
db,
User,
LoginToken,
Settings = { development: {}, test: {}, production: {} };
/**
* Environments
*/
app.configure('development', function() {
db = 'mongodb://localhost/db-development';
app.use(express.errorHandler({ dumpExceptions: true }));
app.set('view options', {
pretty: true
});
});
app.configure('test', function() {
db = 'mongodb://localhost/db-test';
app.set('view options', {
pretty: true
});
});
app.configure('production', function() {
db = 'mongodb://localhost/db-production';
});
console.log(db);
/**
* Models Definitions
*/
models.defineModels(mongoose, function() {
app.User = User = mongoose.model('User');
app.LoginToken = LoginToken = mongoose.model('LoginToken');
});
mongoose.connect(db);
/**
* All environments
*/
app.configure(function() {
app.set('port', process.env.PORT || 3001);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ url: db, secret: 'secret' }));
});
...
// Sessions
app.post('/sessions', sessions.index);
app.get('/login', sessions.new);
app.del('/sessions', loadUser, sessions.del);
// Users
app.get('/register', users.register);
app.post('/users.:format?', users.registerprocess);
...
然后,我的死记硬背文件看起来像这样:
exports.register = function(req, res) {
var user = new User();
res.render('users/new.jade', { flash: req.flash(),
title: 'Register',
bodyClass: 'registration',
user: user});
};
exports.registerprocess = function(req, res) {
var user = new User(req.body.user);
function userSaveFailed() {
req.flash('error', 'Account creation failed');
res.render('users/new.jade', { flash: req.flash(),
title: 'Register',
bodyClass: 'registration',
user: user });
}
user.save(function(err) {
if (err) return userSaveFailed();
req.flash('info', 'Your account has been created');
// emails.sendWelcome(user);
switch (req.params.format) {
case 'json':
res.send(user.toObject());
break;
default:
req.session.user_id = user.id;
res.redirect('/');
}
});
};
当我尝试进入/注册时,我收到以下错误:
ReferenceError: User is not defined
at module.exports.register (/Users/mmellado/workspace/project/routes/users.js:2:18)
at callbacks (/Users/mmellado/workspace/project/node_modules/express/lib/router/index.js:161:37)
at param (/Users/mmellado/workspace/project/node_modules/express/lib/router/index.js:135:11)
at pass (/Users/mmellado/workspace/project/node_modules/express/lib/router/index.js:142:5)
at Router._dispatch (/Users/mmellado/workspace/project/node_modules/express/lib/router/index.js:170:5)
at Object.router (/Users/mmellado/workspace/project/node_modules/express/lib/router/index.js:33:10)
at next (/Users/mmellado/workspace/project/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Object.methodOverride [as handle] (/Users/mmellado/workspace/project/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:49:5)
at next (/Users/mmellado/workspace/project/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Object.logger (/Users/mmellado/workspace/project/node_modules/express/node_modules/connect/lib/middleware/logger.js:156:5)
这使我假设由于某种原因,路由文件中找不到用户架构。为什么会发生这种情况的任何想法?
答案 0 :(得分:1)
您将用户放在app对象上,但您不需要在其他文件中使用它。我不确定你为什么选择在app.js中定义你的模型,你应该在他们自己的文件中定义它们,他们不应该知道你的app实例。然后在你的路线需要你的模型。通过将模型放置在应用程序实例上,您可以在不需要的时候创建紧耦合。
答案 1 :(得分:0)
未定义用户。
为什么你坚持用户应用程序是任何人的猜测,但你需要做的是在你的路由的js文件中有app
。你可以在那里要求它。
编辑: 看着这个例子。在我的选择中它不是很好。它们可以更好地分离来自控制器的路径,并且以非常奇怪的方式导入猫鼬模型,您基本上必须将它们定义两次。它需要更加混乱。
他们的例子将是一个痛苦的延伸。我会发现自己的另一个例子。
(是的,我知道我在这里没什么帮助,但是它的230am以及我能给你的最好的建议就是远离这个垃圾,如果你刚开始使用node / mongoose / express)