单独的expressjs应用程序

时间:2015-07-21 17:01:59

标签: node.js express

我搜索了很多关于如何使用单独的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

1 个答案:

答案 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;

这会将视图路径设置为特定于应用程序(但是,我没有对此进行过广泛测试)。