nodejs之express4x

來源:互聯網
上載者:User

標籤:資料   format   prim   roc   expr   module   依賴庫   http   row   

學習node好榜樣!前陣子看了php,那個模組化編譯真的好棒。然而php學習起來不是一般的記不住,畢竟和js還是有不同的。於是轉移到了node。看到熟悉的js指令碼,心裡踏實多了。

話不多講,php我也是要駕馭的,只是要排到後面去了。今天先來個基於node的架構之express4的模板執行個體

官網api:http://www.expressjs.com.cn/4x/api.html

1.首先,全域安裝。

 npm install -g [email protected]

2.檢測安裝結果

express --version 

3.建立項目,這裡我選擇d盤node檔案夾,安裝架構模板。

express -e nodeDemo

4.進入項目安裝依賴

cd nodeDemo && npm install

5.運行項目,如果不知道運行命令是啥,開啟項目根目錄下‘package.json’檔案,查看scripts對象裡預設第一個的屬性名稱,這個模板裡叫start。

npm start 

6.運行之後,開啟項目根目錄下的bin檔案夾裡的www.js,查看這一句代碼:‘var port = normalizePort(process.env.PORT || ‘3000‘);’3000就是連接埠號碼。基於node伺服器本機ip原則。在瀏覽器輸入。

localhost:3000 或者 127.0.0.1:3000

7.項目結構

bin, 存放啟動項目的指令檔
node_modules, 存放所有的項目依賴庫。
public,靜態檔案(css,js,img)
routes,路由檔案(MVC中的C,controller)
views,分頁檔(Ejs模板)
package.json,項目依賴配置及開發人員資訊
app.js,應用核心設定檔

8.app.js核心檔案說明

// 載入依賴庫,原來這個類庫都封裝在connect中,現在需地注單獨載入var express = require(‘express‘);var path = require(‘path‘);var favicon = require(‘serve-favicon‘);var logger = require(‘morgan‘);var cookieParser = require(‘cookie-parser‘);var bodyParser = require(‘body-parser‘);// 載入路由控制var index = require(‘./routes/index‘);var users = require(‘./routes/users‘);// 建立項目執行個體var app = express();// // 定義EJS模板引擎和模板檔案位置,也可以使用jade或其他模型引擎比如htmlapp.set(‘views‘, path.join(__dirname, ‘views‘));app.set(‘view engine‘, ‘ejs‘);//如果選用html模版就把下面的注釋並開啟把上面這句注釋即可。/* app.engine(‘.html‘, ejs.__express); app.set(‘view engine‘, ‘html‘);*/// uncomment after placing your favicon in /public// 定義icon表徵圖//app.use(favicon(path.join(__dirname, ‘public‘, ‘favicon.ico‘)));// 定義日誌和輸出層級app.use(logger(‘dev‘));// 定義資料解析器app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: false }));// 定義cookie解析器app.use(cookieParser());// 定義靜態檔案目錄app.use(express.static(path.join(__dirname, ‘public‘)));// 匹配路徑和路由app.use(‘/‘, index);app.use(‘/users‘, users);// catch 404 and forward to error handler//404錯誤app.use(function(req, res, next) {  var err = new Error(‘Not Found‘);  err.status = 404;  next(err);});// error handler//500錯誤app.use(function(err, req, res, next) {  // set locals, only providing error in development  res.locals.message = err.message;  res.locals.error = req.app.get(‘env‘) === ‘development‘ ? err : {};  // render the error page  res.status(err.status || 500);  res.render(‘error‘);});// 輸出模型appmodule.exports = app;

  

9.查看./bin/www檔案。

#!/usr/bin/env node/** * 依賴載入 */var app = require(‘../app‘);var debug = require(‘debug‘)(‘nodedemo1:server‘);var http = require(‘http‘);/** * 定義啟動連接埠. */var port = normalizePort(process.env.PORT || ‘3000‘);app.set(‘port‘, port);/** * 建立HTTP伺服器執行個體 */var server = http.createServer(app);/** * 啟動網路服務監聽連接埠 */server.listen(port);server.on(‘error‘, onError);server.on(‘listening‘, onListening);/** * 連接埠標準化函數 */function normalizePort(val) {  var port = parseInt(val, 10);  if (isNaN(port)) {    // named pipe    return val;  }  if (port >= 0) {    // port number    return port;  }  return false;}/** * HTTP例外狀況事件處理函數 */function onError(error) {  if (error.syscall !== ‘listen‘) {    throw error;  }  var bind = typeof port === ‘string‘    ? ‘Pipe ‘ + port    : ‘Port ‘ + port;  // handle specific listen errors with friendly messages  switch (error.code) {    case ‘EACCES‘:      console.error(bind + ‘ requires elevated privileges‘);      process.exit(1);      break;    case ‘EADDRINUSE‘:      console.error(bind + ‘ is already in use‘);      process.exit(1);      break;    default:      throw error;  }}/** * 事件綁定函數 */function onListening() {  var addr = server.address();  var bind = typeof addr === ‘string‘    ? ‘pipe ‘ + addr    : ‘port ‘ + addr.port;  debug(‘Listening on ‘ + bind);}

  

10.編輯views/index.ejs檔案

這裡就是前台展示的頁面了。可以使用我們熟悉架構啊之類的。檔案類型是ejs的,如果想用熟悉的html的,需要在app.js裡修改一下就好,我已經在上面代碼中寫清楚了注釋。

11.重點來了,我夢寐以求的模組化網站:把index.ejs頁面切分成3個部分:header.ejs, index.ejs, footer.ejs,用於網站頁面的模組化。

編輯header.ejs。注意結構!

<!DOCTYPE html><html lang="zh-CN">  <head>    <title><%= title %></title>    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.2/css/bootstrap.min.css">    <link rel=‘stylesheet‘ href=‘/stylesheets/style.css‘ />  </head>  <body>

  

編輯footer.ejs。

<script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>    <script src="http://cdn.bootcss.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>  </body></html>

  

編輯index.ejs。

<% include header.ejs %><div class="well jumbotron"><h1><%= title %></h1><p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p><p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p></div><% include footer.ejs %>

  重新啟動項目,重新整理頁面就會看到結果了。

這裡需要注意,如果你的模組組件放在了其他檔案夾下 那麼引入的命令裡是可以加路徑的,如果你換成了html模板的話,記得把引入命令也修改了。比如:<% include ./psge/header.html %>

至於路由啊還有更高層次的就到官網上看api吧http://www.expressjs.com.cn/4x/api.html

入門到此結束。

 

 

<% include header.ejs %><div class="well jumbotron"><h1><%= title %></h1><p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p><p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p></div><% include footer.ejs %>

nodejs之express4x

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.