Express快速搭建移動端測試用Api服務(wù)端

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ù)了菌赖。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沐序,隨后出現(xiàn)的幾起案子琉用,更是在濱河造成了極大的恐慌,老刑警劉巖策幼,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辕羽,死亡現(xiàn)場離奇詭異,居然都是意外死亡垄惧,警方通過查閱死者的電腦和手機(jī)刁愿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來到逊,“玉大人铣口,你說我怎么就攤上這事【鹾” “怎么了脑题?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铜靶。 經(jīng)常有香客問我叔遂,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任已艰,我火速辦了婚禮痊末,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哩掺。我一直安慰自己凿叠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布嚼吞。 她就那樣靜靜地躺著盒件,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舱禽。 梳的紋絲不亂的頭發(fā)上炒刁,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機(jī)與錄音誊稚,去河邊找鬼翔始。 笑死,一個(gè)胖子當(dāng)著我的面吹牛片吊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播协屡,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俏脊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肤晓?” 一聲冷哼從身側(cè)響起爷贫,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎补憾,沒想到半個(gè)月后漫萄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盈匾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年腾务,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削饵。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岩瘦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窿撬,到底是詐尸還是另有隱情启昧,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布劈伴,位于F島的核電站密末,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜严里,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一新啼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧田炭,春花似錦师抄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞬矩,卻和暖如春茶鉴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背景用。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工涵叮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伞插。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓割粮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親媚污。 傳聞我的和親對象是個(gè)殘疾皇子舀瓢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容