如何在Node.js + Express垂直结构项目中设置视图变量?

时间:2016-03-03 13:23:56

标签: node.js express ejs

我决定为 Node.js + Express 项目采用垂直结构,因此我有子项目/子文件夹(用户管理,购物车,库存)按功能:

Project
--core
----views
----(...)
--usermgmt
----views

显然为每个功能定义了控制器,路由,模型和视图。 我现在的问题是如何设置项目的视图目录。我的意思是当我在水平结构中这样做时,我写道:

app.set('views', path.join(__dirname, 'views'));

由于views目录是唯一的

,因此很容易

但现在,我有很多观点目录,所以我不知道最佳做法是什么。目前,我设置变量视图to __dirname,当我渲染时,我从根目录转到相应的目录。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我引用文档本身。

  

应用程序视图的目录或目录数组。如果   一个数组,视图按照它们出现的顺序查找   阵列。

http://expressjs.com/en/4x/api.html#app.set (向下滚动并在下面的表格中找到views

enter image description here

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)

谢谢!因此,它适用于使用视图目录。我将尝试第二种选择,同时我将进行重大的重构

英里每小时