1. 程式人生 > >【Web開發】Mean web開發 01-Express實現MVC模式開發

【Web開發】Mean web開發 01-Express實現MVC模式開發

http scripts send javascrip 模板引擎 指令 開發環境 depend filter

簡介

Mean是JavaScript的全棧開發框架。更多介紹

用Express實現MVC模式開發是Mean Web全棧開發中的一部分。

Express 是一個基於 Node.js 平臺的極簡、靈活的 web 應用開發框架,它提供一系列強大的特性,幫助你創建各種 Web 和移動設備應用。Express官網。

兩種文件夾結構

水平文件夾結構:

按照文件的功能來分類。整個應用的分類都放在一個按照MVC文件夾結構組合的目錄之中。例如:

app文件夾用於保存Express應用的邏輯部分相關代碼,包含:

controllers文件夾:存放Express應用的控制器文件

  • models文件夾:存放應用模型
  • routes文件夾:存放路由中間件文件
  • views文件夾:存放應用視圖文件

config文件夾用於存放Express配置文件。例如:

env文件夾:存放Express應用環境配置文件(測試、開發環境的切換等等)

config.js文件:用於Express應用配置

express.js文件:用於Express應用初始化

public文件夾用戶保存瀏覽器端的靜態文件,再次按照MVC模式分為:

  • config文件夾:用於存儲AngularJS應用的配置文件
  • controllers文件夾,用戶存儲AngularJS應用的控制文件
  • css文件夾:存放CSS樣式
  • directives文件夾:存放AngularJS應用的指令文件
  • filters文件夾:存放AngularJS應用的過濾器文件
  • img文件夾:存放圖片
  • views文件夾:存放AngularJS應用的視圖文件
  • application.js文件:用於AngularJS的初始化

package.json文件:存有用於管理應用依賴的元數據

server.js文件:是Node程序的主文件,以模塊的方式加載express.js引導Express應用的啟動

垂直文件夾結構:

按照文件所實現的功能進行文件和文件夾管理,每個功能都有各自的MVC模式組織目錄結構,比較適合大型項目。比如:

server文件夾用於存放服務器邏輯,其內部按照MVC可分為:

controllers、models、routes、views、config(evn、feature.server.config.js)文件夾

client文件夾用於存放客戶端文件,按照MVC模式可分為:

config、controllers、css、directives、filters、img、views、feature.client.module.js文件和文件夾等

以水平文件夾結構為例

1.首先創建如下目錄:

技術分享

2.package.json代碼內容如下,暫時不用的dependencies可以不用寫上去。

{
  "name": "websiteframe03",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "body-parser": "~1.16.0",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.0",
    "ejs": "~2.5.5",
    "express": "~4.14.1",
   "serve-favicon": "~2.3.2" } }

3.在app/controllers文件夾裏面創建一個名為index_server_control.js的文件,註意命名方式,因為項目中前端AngularJS也會涉及到MVC模式,所以盡量將前端和後端的MVC文件命名方式區分開來。

控制器:index_server_control.js文件裏面代碼如下:

/**
 * Created by Goss on 2017/6/6.
 * 控制器:拼數據給視圖,渲染應用視圖
 */
exports.render=function(req,res){
    console.log(‘start index_server_control_render‘);

    //res.send(‘Hello world‘);
    res.render(‘index‘,{title:‘Hello world title‘});
}

4.兩種路由方式:

1.app.route(path).VERB(callback)

2.app.VERB(path,callback)

(VERB要替換成小寫的http方法名,比如get、post)

創建路由文件index_server_routes.js,然後加入如下代碼:

/**
 * Created by Goss on 2017/6/6.
 * 中間件:業務邏輯
 */
var index=require(‘../controllers/index_server_control.js‘);

function index_server_routes(app){
    console.log(‘start index_server_routes‘);
    app.get(‘/‘,index.render);
    return app;
}

module.exports=index_server_routes;

5.接下來創建express_config.js文件來創建Express應用對象,分成兩步:

  • a.創建Express應用實例
  • b.調用前面創建的路由文件,以函數調用的方式傳入應用實例

路由文件中的函數會為應用實例調用控制器的render()方法來創建新的路由配置,最後返回處理好的應用實例,代碼如下:

/**
 * Created by Goss on 2017/6/6.
 * 配置Express應用,所有與Express應用相關的配置也需要添加到這個文件中
 */
var express=require(‘express‘);
var index_server_routes=require(‘../app/routes/index_server_routes.js‘);

function express_config(){
    console.log(‘start express_config‘);
    var app=express();
  
    app.set(‘views‘,‘./app/views‘);  //設置視圖文件存儲目錄
    app.set(‘view engine‘,‘ejs‘);   //設置EJS作為Express應用的模板引擎

    new index_server_routes(app);

    app.use(express.static(‘./public‘));    //指定靜態文件所在路徑,要放在路由中間件之下,即先執行路由邏輯
    return app;
}

module.exports=express_config;

6.最後在根目錄的server.js文件中寫入主程序代碼,通過包含Express配置模塊,獲取Express應用對象實例,並監聽8080端口,代碼如下:

var express_config=require(‘./config/express_config.js‘);
var app=new express_config();

app.listen(8080);

console.log(‘server running at http://localhost:8080‘);

module.exports = app;

7.在views文件夾中加入EJS視圖渲染文件,並在express_config.js文件中加入app.set對引擎進行設置,index.ejs代碼如下:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel=‘stylesheet‘ href=‘/stylesheets/style.css‘ />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
  <img src="/images/timg.jpg" alt="img">
  </body>
</html>

8.靜態文件路徑的配置,即在express_config.js裏面加入靜態文件路徑:

app.use(express.static(‘./public‘));    //指定靜態文件所在路徑,要放在路由中間件之下,即先執行路由邏輯

最後運行:node server運行服務端,瀏覽器中打開:http://localhost:8080

下篇加入:MongoDB

【Web開發】Mean web開發 01-Express實現MVC模式開發