【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/