nodeJs開發app.js解析
在 node.js 中模塊分為核心模塊和文件模塊兩種,核心模塊是通過 require('xxxx') 導入的,文件模塊是以 require('/xxxx') 或 require('./xxxx')、require('../xxxx') 形式導入的;核心模塊是用c/c++編譯的二進制模塊,而文件模塊是后綴為.js、.json、.node 的文件,在 node.js 中一個文件/文件夾也可以稱之為一個模塊。更多關于模塊及模塊加載順序的信息請查閱官網:http://nodejs.org/api/all.html#all_modules
這里導入了 express、http、path 核心模塊,routes 文件夾下的 index.js 和 user.js 文件模塊。
因為 express 框架是依賴 connect 框架(Node的一個中間件框架)創建而成的,可查閱 connect 文檔:http://www.senchalabs.org/connect/和 express 官方文檔:http://expressjs.com/api.html了解更多內容。
app.set(name, value):設置 name 的值為 value
app.set('port', process.env.PORT || 3000):設置端口為 process.env.PORT 或 3000
app.set('views', __dirname + '/views'):設置 views 文件夾為視圖文件的目錄,存放模板文件,__dirname 為全局變量,存儲著當前正在執行腳本所在的目錄名。
app.set('view engine', 'ejs'):設置視圖模版引擎為 ejs
app.use([path], function):使用中間件 function,可選參數path默認為"/"
app.use(express.favicon()):connect 內建的中間件,使用默認的 favicon 圖標,如果想使用自己的圖標,需改為app.use(express.favicon(__dirname + '/public/images/favicon.ico')); 這里我們把自定義的 favicon.ico 放到了 public/images 文件夾下。
app.use(express.logger('dev')):connect 內建的中間件,在開發環境下使用,在終端顯示簡單的不同顏色的日志,比如在啟動 app.js 后訪問 localhost:3000,終端會輸出:
Express server listening on port 3000 GET / 200 21ms - 206b GET /stylesheets/style.css 304 4ms
數字200顯示為綠色,304顯示為藍色。假如你去掉這一行代碼,不管你怎么刷新網頁,終端都只有一行 Express server listening on port 3000。
app.use(express.bodyParser()):connect 內建的中間件,用來解析請求體,支持 application/json, application/x-www-form-urlencoded, 和 multipart/form-data。
app.use(express.methodOverride()):connect 內建的中間件,可以協助處理 POST 請求,偽裝 PUT、DELETE 和其他 HTTP 方法。
app.use(app.router):設置應用的路由(可選),詳細請參考:http://stackoverflow.com/questions/12695591/node-js-express-js-how-does-app-router-work
app.use(express.static(path.join(__dirname, 'public'))):connect 內建的中間件,設置根目錄下的 public 文件夾為靜態文件服務器,存放 image、css、js 文件于此。
if ('development' == app.get('env')) {app.use(express.errorHandler());}:開發環境下的錯誤處理,輸出錯誤信息。
app.get('/', routes.index):路由控制器,如果用戶訪問" / "路徑,則由 routes.index 來控制,routes/index.js 內容如下:
exports.index = function(req, res){ res.render('index', { title: 'Express' }); };
通過 exports.index 導出 index 函數接口,app.get('/', routes.index) 相當于:
app.get('/', function(req, res){ res.render('index', { title: 'Express' }); };)
res.render('index', { title: 'Express' }):調用 ejs 模板引擎解析 views/index.ejs(我們之前通過 app.set('views', __dirname + '/views')設置了模版文件默認存儲在 views 下),并傳入一個對象作為參數,這個對象只有一個屬性 title: 'Express',即用字符串 Express 替換 views/index.ejs 中所有 title 變量,后面我們將會了解更多關于模板引的內容。
http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
這段代碼的意思是創建服務器并監聽3000端口,成功后在命令行中顯示 Express server listening on port 3000,然后我們就可以通過在瀏覽器輸入 localhost:3000 來訪問了。

浙公網安備 33010602011771號