Express是做什么的致开?
官網(wǎng)給出的解釋是:基于 Node.js 平臺,快速萎馅、開放双戳、極簡的 web 開發(fā)框架。
你可能會問了糜芳,移動端要web開發(fā)框架做什么呢拣技?
其實(shí)很簡單,做過實(shí)際開發(fā)項(xiàng)目的同學(xué)應(yīng)該知道耍目,在我們移動端開發(fā)的項(xiàng)目中,絕大部分的項(xiàng)目都是需要網(wǎng)絡(luò)數(shù)據(jù)的徐绑。而公司項(xiàng)目的話邪驮,網(wǎng)絡(luò)數(shù)據(jù)的來源一般都是web端的服務(wù)器,比如常用的就有SSH2框架或者SpringMVC搭建的web框架傲茄,這種框架在實(shí)際開發(fā)中是很常用的毅访,但是在實(shí)際項(xiàng)目開發(fā)的過程中,我們的服務(wù)端開發(fā)人員不可能在很短的時(shí)間內(nèi)就把移動端要用的API寫好盘榨,而移動端的開發(fā)人員也不能一直等著服務(wù)端的API都寫完了再開發(fā)喻粹,所以Express這種超級輕量級的Web框架就有用武之地了。(當(dāng)然草巡,Express還可以做很多哦守呜,只是作為移動開發(fā)人員,用到的功能可能不需要那么多山憨。)
該怎么用Express?
之前我的解決方案都是在應(yīng)用中寫一個(gè)Json的字符串查乒,然后當(dāng)作網(wǎng)絡(luò)數(shù)據(jù)來用,但是這種做法有一個(gè)很大的弊端就是你不能模擬網(wǎng)絡(luò)上的各種情況郁竟,也無法模擬分頁效果和提交效果玛迄,而Express就可以很輕松的做到我們要的啦。
現(xiàn)在來說說怎么用Express吧:
1.首先安裝Node.js和Npm,至于怎么裝就百度吧棚亩。
2.測試你的Node.js和Npm是否安裝成功蓖议,測試方法就是在cmd下輸入:node -v 或者 npm -v ,如果出現(xiàn)版本號則說明安裝成功讥蟆。
3.創(chuàng)建你的Node.js工程:先在某個(gè)盤符下創(chuàng)建一個(gè)空文件夾勒虾,我就是在E盤創(chuàng)建了一個(gè)ExpressServerWorkSpace的文件夾,然后通過cmd命令瘸彤,進(jìn)入到這個(gè)文件夾下从撼,然后再該文件夾下輸入命令
npm init
之后命令行會有一些提示,按照英文指示寫一些基礎(chǔ)信息,這些信息除了第一個(gè)必須寫以外其他的都可以按回車跳過低零,這個(gè)步驟主要是為了生成一個(gè)叫做Package.json的Node.js工程的配置文件婆翔,當(dāng)然,如果有需要掏婶,這個(gè)文件是可以修改的啃奴。
4.安裝需要的JS庫 —— body-parser
body-parser是一個(gè)用來解析Http請求體的中間件,關(guān)于中間件雄妥,讀者可以去Express的官網(wǎng)學(xué)習(xí)一下:Express中間件
安裝命令很簡單最蕾,一樣是在Cmd下輸入:
npm install --save express body-parser
等待安裝完成即可。
到這里老厌,Express就算是安裝完成了瘟则,這時(shí)候你在看你剛才建立的文件夾是不是多了很多文件呢?
開始編寫App.js
什么是App.js呢枝秤?其實(shí)就是Express啟動的框架文件醋拧,這個(gè)文件的主要作用是定義一些網(wǎng)絡(luò)請求,并且確定網(wǎng)絡(luò)請求的路徑和請求的內(nèi)容的淀弹。
這個(gè)App.js是要放到你創(chuàng)建的Node.js工程文件夾的根目錄下:
var fs = require('fs');
var path = require('path');
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var USERS_FILE = path.join(__dirname, 'api/users.json'); // user.json文件的路徑
var CARS_FILE = path.join(__dirname, 'api/cars.json'); // user.json文件的路徑
app.set('port', (process.env.PORT || 9999));
app.use('/', express.static(path.join(__dirname, 'public')));
//使用body-parser中間件
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
// 中間件丹壕,每個(gè)請求都會進(jìn)行處理.
app.use(function(req, res, next) {
// Set permissive CORS header - this allows this server to be used only as
// an API server in conjunction with something like webpack-dev-server.
res.setHeader('Access-Control-Allow-Origin', '*');
// Disable caching so we'll always get the latest comments.
res.setHeader('Cache-Control', 'no-cache');
next();
});
// 處理/api/users的GET請求
app.get('/api/users', function(req, res) {
fs.readFile(USERS_FILE, function(err, data) {
if (err) {
console.error(err);
process.exit(1); //退出應(yīng)用
}
res.json(JSON.parse(data));
});
});
// 處理/api/carslist的GET請求
app.get('/api/carslist', function(req, res) {
fs.readFile(CARS_FILE, function(err, data) {
if (err) {
console.error(err);
process.exit(1); //退出應(yīng)用
}
res.json(JSON.parse(data));
});
});
//處理/api/users的POST請求
app.post('/api/users', function(req, res) {
fs.readFile(USERS_FILE, function(err, data) {
if (err) {
console.error(err);
process.exit(1);
}
var users = JSON.parse(data);
//控制post提交的參數(shù)類型
var user = {
name: req.body.name,
email: req.body.email
};
//將user加入到users中去。
users.push(user);
fs.writeFile(USERS_FILE, JSON.stringify(users, null, 4), function(err) {
if (err) {
console.error(err);
process.exit(1);
}
//請求成功后返回的提示json
res.json("{code: 200, message: 'Add user successful.'}");
});
});
});
app.listen(app.get('port'), function() {
console.log('Server started: http://localhost:' + app.get('port') + '/');
});
現(xiàn)在在你創(chuàng)建的Node.js工程的文件夾下創(chuàng)建一個(gè)文件夾名為:api,然后把需要的json都放入到這個(gè)文件夾下去薇溃。
users.json:
[
{
"name": "jason",
"email": "jasoncool_521@qq.com"
},
{},
{},
{
"name": "123",
"email": "123"
}
]
cars.json:
{
"carList": [
{
"carid": 1
},
{
"carid": 2
}
],
"code": "200"
}
運(yùn)行App.js
在Cmd下輸入:
> node app.js
然后我們就可以在瀏覽器中輸入
http://localhost:9999/api/users或者h(yuǎn)ttp://localhost:9999/api/carslist
來測試一下我們的REST服務(wù)端返回的數(shù)據(jù)了菌赖。