我正在使用Express.js使用Node.js构建一个简单的播客网站。我正在使用Pug作为我的视图引擎。一切正常,直到我将我的哈巴狗文件放在views文件夹中的子目录中,以便将播客视图与管理端分开。我对Node和后端/ web开发一般都很陌生,所以我真的很感激任何帮助,因为我在网上搜索没有运气。我的项目结构如下:
/podcast
/bin
www
/model
account.js
post.js
/node_modules
/public
/routes
admin.js
index.js
/views
/admin
index.pug
layout.pug
login.pug
register.pug
/podcast
about.pug
contact.pug
error.pug
index.pug
layout.pug
app.js
package.json
我的 package.json :
{
...
"dependencies" : {
"body-parser" : "~1.16.0",
"cookie-parser" : "~1.4.3",
"debug" : "~2.6.0",
"express": "~4.14.1",
...
"mongodb" : "^2.2.24",
"mongoose" : "^4.9.0",
"morgan" : "~1.7.0",
"passport" : "^0.3.0",
"passport-local" : "^1.0.0",
"passport-local-mongoose" : "^4.0.0",
"pug" : "~2.0.0-beta10",
...
}
}
我的 app.js (部分)如下:
var express = require('express');
// Boilerplate modules
...
// Import routers
var index = require('./routes/index');
var admin = require('./routes/admin');
...
// view engine setup
app.set('views', path.join(__dirname, './views'));
app.set('view engine', 'pug');
// some middleware
...
app.use('/', index);
app.use('/admin', admin);
...
routes / index.js中的所有路由都可以正常工作。问题出在 admin.js :
var express = require('express');
var passport = require('passport');
var Account = require('../model/account');
var router = express.Router();
// Handle /admin requests
router.get('/', function(req, res) {
if(req.user) {
res.render('admin/index', { user.req });
} else {
res.redirect('admin/login');
}
});
// Handler /admin/login requests
router.get('/login', function(req, res) {
res.render('admin/login', { user : req.user });
});
router.post('/login', passport.authenticate('local'), function(req, res) {
res.redirect('/');
});
router.get('/register', function(req, res) {
Account.register(new Account({ username: req.body.username }), req.body.password, function(err, account) {
if(err) {
return res.render('admin/register', { account : account });
}
passport.authenticate('local')(req, res, function() {
res.redirect('/');
});
}
});
另外注意:该应用程序使用MongoDB作为数据库。 一切除了我发送请求(POST或GET到 / admin / register )时有效。
这是我的第一个Node项目,所以我可能会遗漏一些完全明显的东西,但我会感激任何帮助。