Express 創(chuàng)建應(yīng)用

創(chuàng)建一個帶有express自帶框架的項目

1. 全局安裝express

npm install express -g

  • 使用express爸业,需要全局模式安裝express,支持jadeejs模板引擎。
  • 預(yù)知兩個模板的區(qū)別,請自行谷歌

但是目前我們還不能使用express,需要再執(zhí)行命令

npm install -g express-generator

2. 創(chuàng)建 express項目

express -e express-demo

  • 使用 -e 會默認(rèn)使用 jade 模板茬贵,如果想使用 ejs 模板,可以使用

express -t ejs express-demo

3. 安裝項目依賴

cd express-demo
npm install

4. 在項目根目錄下執(zhí)行

npm start

5.在瀏覽器訪問

localhost:3000

6. 在瀏覽器訪問

locahost:3000/users

自己創(chuàng)建一個Express項目

1. 新建文件夾 epress-own-demo

mkdir express-own-demo

2. 安裝本項目所需依賴

在根目錄下新建文件 package.json

{
  "name": "express-own-demo",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "nodemon app.js",
    "test": "jasmine",
    "itest": "jasmine spec/*[sS]pec.js"
  },
  "dependencies": {
    "body-parser": "~1.15.1",
    "cookie-parser": "~1.4.3",
    "express": "~4.13.4"
  },
  "devDependencies": {
    "jasmine": "^2.7.0",
    "nodemon": "^1.10.0",
    "supertest": "^1.2.0"
  }
}

然后執(zhí)行

npm install

3. 創(chuàng)建項目入口

在根目錄下創(chuàng)建 app.js

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());

app.listen(8010, function (req, res, next) {
    console.log("hello world");
});

module.exports = app;

4. 在根目錄下創(chuàng)建routes文件夾

  • 在routes文件夾下創(chuàng)建文件route.js
    route.js 使用中間件來接收前端發(fā)過來的所有路由并且根據(jù)不同的路由來找對應(yīng)的js文件议蟆。
exports.setRoutes = app => {
    app.use('/items', require('./routers/item-routers'));
};
  • 在app.js 中增加
const route = require('./routes/route');
route.setRoutes(app);
  • 在routes文件夾下創(chuàng)建文件夾routers
    在routers文件夾下創(chuàng)建 item-routers.js闷沥,內(nèi)容如下
const router = require('express').Router();
const Controller = require("../../controller/item-controller");

const controller = new Controller();

router.get('/', controller.index);
router.get('/:id', controller.show);
router.post('/', controller.create);
router.put('/:id', controller.update);
router.delete('/:id', controller.destroy);


module.exports = router;

5. 在根目錄下創(chuàng)建Controller文件夾

Controller文件夾的主要作用是對routers里面的不同的方法的具體實現(xiàn)。
比如:item-controller.js

class ItemController {

    index(req, res) {
        res.send('Success get!');
    }

    show(req, res) {
        res.send('Success get id!');
    }

    create(req, res) {
        res.send('Success create!');
    }

    update(req, res) {
        res.send('Success update!');
    }

    destroy(req, res) {
        res.send('Success delete!');
    }
}

module.exports = ItemController;

6. 啟動程序

  • 在根目錄下執(zhí)行 npm start
  • 用postman訪問 localhost:3000/items咐容,分別對五個接口進(jìn)行測試。

7. 使用Jasmine 對接口進(jìn)行測試

  • 在項目根目錄下執(zhí)行

jasmine init

此時蚂维,會在項目根目錄下生成一個spec文件夾戳粒,這個文件夾下有一個support文件夾,文件夾里面有一個jasmine.json文件虫啥,這個文件的主要作用就是告訴我們執(zhí)行測試的文件夾以及測試的文件的命名格式蔚约。

  • 在生成的spec文件夾下新建 item-routes-spec.js,內(nèi)容如下:
const app = require('../app');
const supertest = require('supertest');

const request = supertest(app);

describe('items api', () => {

    it('GET /items', (done) => {
        request.get('/items').expect('Success get!', done);
    });

    it('GET /items/:id', (done) => {
        request.get('/items/1').expect('Success get id!', done);
    });

    it('POST /items', (done) => {
        request.post('/items').expect('Success create!', done);
    });

    it('PUT /items/:id', (done) => {
        request.put('/items/1').expect('Success update!', done);
    });

    it('DELETE /items/:id', (done) => {
        request.delete('/items/1').expect('Success delete!', done);
    });
});
  • 然后在spec文件夾下執(zhí)行:

jasmine

就會看到

?  express-own-demo git:(master) npm test

> express-own-demo@0.0.0 test /Users/ruguo/workspace/express-own-demo
> jasmine

Started
hello world
.....


5 specs, 0 failures
Finished in 0.039 seconds
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涂籽,一起剝皮案震驚了整個濱河市苹祟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌评雌,老刑警劉巖树枫,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異景东,居然都是意外死亡砂轻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門斤吐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搔涝,“玉大人厨喂,你說我怎么就攤上這事∽剩” “怎么了蜕煌?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诬留。 經(jīng)常有香客問我幌绍,道長,這世上最難降的妖魔是什么故响? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任傀广,我火速辦了婚禮,結(jié)果婚禮上彩届,老公的妹妹穿的比我還像新娘伪冰。我一直安慰自己,他們只是感情好樟蠕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布贮聂。 她就那樣靜靜地躺著,像睡著了一般寨辩。 火紅的嫁衣襯著肌膚如雪吓懈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天靡狞,我揣著相機(jī)與錄音耻警,去河邊找鬼。 笑死甸怕,一個胖子當(dāng)著我的面吹牛甘穿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梢杭,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼温兼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了武契?” 一聲冷哼從身側(cè)響起募判,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咒唆,沒想到半個月后届垫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钧排,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年敦腔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恨溜。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡符衔,死狀恐怖找前,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情判族,我是刑警寧澤躺盛,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站形帮,受9級特大地震影響槽惫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辩撑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一界斜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧合冀,春花似錦各薇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棕叫,卻和暖如春林螃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俺泣。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工疗认, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砌滞。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓侮邀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贝润。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

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