前言
Node
妹子的問世,着實讓我們前端攻城獅興奮了一把,尤其本屌聽說Javascript
可以寫服務端后,興奮的像是看到了二次元蘿莉的胖子...(●'◡'●)。呃哼...YY先到這里,原諒本屌是個二次元蘿莉控。
正文
想談好對象,並不是要new
一個就行了,必須要先認識人家后慢慢的才可以上手,然后慢慢推上床<( ̄︶ ̄)>。
想想自己搞前端開發的時候,為了盡力讓頁面在瀏覽器君體內完美展現,也是做了不少功課,其中最不可少的就是要認識認識。這玩意是什么,能干什么。
對於寄宿在瀏覽器中的Javascript
就不多說了,之前發過一篇簡單的文章《前端Javascript與Nodejs的異同》
,大概描述了下Nodejs
與前端javascript
的異同,如果你好好看的話肯定能明白的。
index.js
搭建一個Node
應用,少不了一個主文件,不少人根據各自喜好來定義名字,像app.js
、main.js
。
這里尊重npm init
時的默認配置為index.js
,其實個人還是挺喜歡app.js
這個命名的。
為了方便,本屌也使用了express
這個高大上的框架。
好!!!下面,我們來看看index.js
里應該有的內容。
//引用依賴模塊
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 routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// 視圖引擎設置
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
//中間件
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//路由
app.use('/', routes);
app.use('/users', users);
//遇到錯誤時的中間件
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
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
});
});
}
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
//拋出 提供給www.js 並通過www.js來開啟服務
module.exports = app;
以上代碼是通過express
腳手架生成的一個比較標准的內容,個人在里面做了簡單的注釋。然后我想說,請童鞋們不要急着看每一行代碼是什么意思,因為如果你熟悉nodejs
不用看也知道寫的什么,如果你不了解,也暫時不要去了解,我們看一本新書的時候,一定要先看一下它的目錄才能大概知道書的內容。
現在我們來整理一下這個index.js
的大概目錄,不難發現,它有幾個重要的部分組成:
引入依賴模塊
設置相關配置
定義中間件
定義路由
開啟服務
幾乎所有的入口文件都少不了這幾個組成部分,而且順序也是按照上面列表從上到下依次編寫。這里需要說的是中間件這一部的編寫,大部分中間件是寫在路由之前,但是有些中間件應該在路由之后執行,比如處理錯誤的中間件,一般放在路由后面執行。
其實一個完整的入口文件並不是只有上面說的那么多,它還有一些可選項來構成完整的index.js
。為了方便比較,就直接列舉出來吧:
引入依賴模塊
設置相關配置
連接數據庫(可選)
定義中間件
定義路由
開啟服務
在多核系統上啟動cluster多核處理模塊(可選)
可以看出,添加了連接數據庫和多核處理兩個可選組成部分。
總結
一個完整的index.js
由7個部分組成,大家只要把主文件當成白雪公主,把7個組成部分當作七個小矮人就行了,哈哈,這個記法真天才。
不過話說回來,並不是每個應用都必須7個大將全上場,可能是5個,可能是6個,也可能是7個,大家在組織代碼的時候根據應用和硬件需求來自定義構建即可。