我搜索了很多关于如何使用单独的expressjs路线,但他们都没有帮助我。 我有以下结构。
+-- account
| +-- views
| | +-- signin.jade
| +-- route.js
| app.js
| route.js
我需要在另一个名为account
的快递应用中实现与用户帐户相关的内容。
以下是我在account/route.js
中的内容:
var express = require('express'),
router = express.Router();
var signIn = function(req, res) {
res.render('signin', {title: 'Sign In'});
}
var signOut = function(req, res) {
// sign out process
}
router.get('/signin', signIn);
router.get('/signout', signOut);
module.exports = router;
这是我的route.js
:
var express = require('express'),
router = express.Router();
var index = function(req, res, next) {
// home page
}
router.get('/', index);
module.exports = router;
最后我的app.js
:
var express = require('express');
var app = express();
...
// other stuff
...
app.set('views', path.join(__dirname, 'views'));
app.use('/', require('./route'));
app.use('/account', require('./account/route'));
现在,当我运行我的应用程序并导航到account/signin
时,我收到以下错误:
Error: Failed to lookup view "signin" in views directory "/home/sina/dev/test/views"
我正在使用ExpressJS 4.x
答案 0 :(得分:2)
您的模板位于 account/views
,但您告诉Express在views
中查找它们。试试这个:
app.set('views', path.join(__dirname, 'account', 'views'));
如果您想支持多个应用程序,我可以考虑两个解决方案。
首先是更改目录结构,以便所有视图都位于同一个父目录中:
+-- views
| +----- account
| | +------- signin.jade
| +----- anotherapp
| | +------- anotherfile.jade
| ...
+-- account
| +------ route.js
| ...
|
另一个选择是创建子应用程序,而不是普通路由器。例如,您的account/route.js
将如下所示:
var express = require('express');
var app = express();
app.set('views', path.join(__dirname, 'views'));
var signIn = function(req, res) {
res.render('signin', {title: 'Sign In'});
}
var signOut = function(req, res) {
// sign out process
}
app.get('/signin', signIn);
app.get('/signout', signOut);
module.exports = app;
这会将视图路径设置为特定于应用程序(但是,我没有对此进行过广泛测试)。