我决定为 Node.js + Express 项目采用垂直结构,因此我有子项目/子文件夹(用户管理,购物车,库存)按功能:
Project
--core
----views
----(...)
--usermgmt
----views
显然为每个功能定义了控制器,路由,模型和视图。 我现在的问题是如何设置项目的视图目录。我的意思是当我在水平结构中这样做时,我写道:
app.set('views', path.join(__dirname, 'views'));
由于views目录是唯一的
,因此很容易但现在,我有很多观点目录,所以我不知道最佳做法是什么。目前,我设置变量视图to __dirname
,当我渲染时,我从根目录转到相应的目录。
有什么建议吗?
答案 0 :(得分:1)
我引用文档本身。
应用程序视图的目录或目录数组。如果 一个数组,视图按照它们出现的顺序查找 阵列。
http://expressjs.com/en/4x/api.html#app.set
(向下滚动并在下面的表格中找到views
)
OR
您可以将每个feature
创建为单独的应用(只是不要app.listen
),然后在您的主应用中,您可以执行此类操作
Launch.js
#!/usr/bin/env node
var http = require('http');
var app = require('express')();
app.use('/feature1',require('./feature1');
app.use('/feature2',require('./feature2');
// Setup port
var port = process.env.PORT || 3000;
app.set('port', port);
//Create HTTP server.
var server = http.createServer(app);
//Listen on provided port, on all network interfaces.
server.listen(port);
server.on('listening', function(){
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
//You can open browser -- uncomment below line
//require("openurl").open("http://localhost:3000");
debug('Magic happens at : http://localhost:' + addr.port);
});
您的feature
目录将包含一个index.js,它可以...
的.js var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser');
var settings = require('./lib/settings');
//Import your routes
var defRoute = require('./defRoute');
var users = require('./users');
var someOtherResource = require('./someOtherResource');
var app = express();
// view engine setup
//This sets view for `this` app to relative `views` folder
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//Mount your routes
app.use('/',defRoute);
app.use('/users', users);
app.use('/someOtherResource', someOtherResource')
//Other awesome code
//Return this app.
module.exports = app;
希望这有帮助!
答案 1 :(得分:0)
谢谢!因此,它适用于使用视图目录。我将尝试第二种选择,同时我将进行重大的重构
英里每小时