【node.js學習】--(4)--Express4.x架構,node.js妗嗘灦

來源:互聯網
上載者:User

【node.js學習】--(4)--Express4.x架構,node.js妗嗘灦

Express是Nodejs標準的web開發架構

  

參考http://blog.fens.me/nodejs-express4/

安裝項目構建器

先安裝 npminstall -g express

再安裝npm install -gexpress-generator  #全域安裝-g

檢查安裝結果 express -V# 檢查express的版本


卸載(需要時使用)

npm uninstall-g express

 

參考

http://blog.csdn.net/JBBOY/article/details/25038299

http://jingyan.baidu.com/album/922554468a3466851648f419.html?picindex=1

建立項目

express -enodejs-demo

 

進入項目目錄,下載依賴庫,構建項目。

cd nodejs-demo && npm install

啟動項目

npm start

效果如


目錄結構說明

nodejs-demo/

├──app.js  應用核心設定檔

├──bin  啟動項目的指令檔

├──node_modules  項目依賴庫

├──package.json  項目依賴配置及開發人員資訊

├──public  靜態檔案(css,js,img)

├──routes  路由檔案(MVC中的C,controller)

└──views  分頁檔(Ejs模板)

package.json

其中scripts屬性是用於定義操作命令的,可以非常方便的增加啟動命令,比如預設的start,用npm start代表執行node ./bin/www命令。

app.js檔案

//載入依賴庫,原來這個類庫都封裝在connect中,現在需地注單獨載入

varexpress = require('express');

varpath = require('path');

varfavicon = require('serve-favicon');

varlogger = require('morgan');

varcookieParser = require('cookie-parser');

varbodyParser = require('body-parser');

 

//載入路由控制

varroutes = require('./routes/index');

//varusers = require('./routes/users');

 

//建立項目執行個體

varapp = express();

 

//定義EJS模板引擎和模板檔案位置,也可以使用jade或其他模型引擎

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

app.set('viewengine', 'ejs');

 

//定義icon表徵圖

app.use(favicon(__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('/',routes);

//app.use('/users',users);

 

//404錯誤處理

app.use(function(req,res, next) {

    var err = new Error('Not Found');

    err.status = 404;

    next(err);

});

 

//開發環境,500錯誤處理和錯誤堆疊追蹤

if(app.get('env') === 'development') {

    app.use(function(err, req, res, next) {

        res.status(err.status || 500);

        res.render('error', {

            message: err.message,

            error: err

        });

    });

}

 

//生產環境,500錯誤處理

app.use(function(err,req, res, next) {

    res.status(err.status || 500);

    res.render('error', {

        message: err.message,

        error: {}

    });

});

 

//輸出模型app

module.exports= app;

 

www檔案

www檔案也是一個node的指令碼,用於分離配置和啟動程式。

查看./bin/www檔案。

 

#!/usr/bin/envnode  

 

/**

 * 依賴載入

 */

varapp = require('../app');

vardebug = require('debug')('nodejs-demo:server');

varhttp = require('http');

 

/**

 * 定義啟動連接埠

 */

varport = normalizePort(process.env.PORT || '3000');

app.set('port',port);

 

/**

 * 建立HTTP伺服器執行個體

 */

varserver = http.createServer(app);

 

/**

 * 啟動網路服務監聽連接埠

 */

server.listen(port);

server.on('error',onError);

server.on('listening',onListening);

 

/**

 * 連接埠標準化函數

 */

functionnormalizePort(val) {

  var port = parseInt(val, 10);

  if (isNaN(port)) {

    return val;

  }

  if (port >= 0) {

    return port;

  }

  return false;

}

 

/**

 * HTTP例外狀況事件處理函數

 */

functiononError(error) {

  if (error.syscall !== 'listen') {

    throw error;

  }

 

  var bind = typeof port === 'string'

    ? 'Pipe ' + port

    : 'Port ' + port

 

  // handle specific listen errors withfriendly messages

  switch (error.code) {

    case 'EACCES':

      console.error(bind + ' requires elevatedprivileges');

      process.exit(1);

      break;

    case 'EADDRINUSE':

      console.error(bind + ' is already inuse');

      process.exit(1);

      break;

    default:

      throw error;

  }

}

 

/**

 * 事件綁定函數

 */

functiononListening() {

  var addr = server.address();

  var bind = typeof addr === 'string'

    ? 'pipe ' + addr

    : 'port ' + addr.port;

  debug('Listening on ' + bind);

}

參考

http://blog.fens.me/nodejs-express4/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.