React系列學習筆記:7.簡單api服務器

前言

本節(jié)我們將創(chuàng)建一個簡單的后端API服務器懦趋,以便我們的應用進行相應的測試。僅僅只用express創(chuàng)建一個服務器就行疹味,將用到幾個express中間件:

  • body-parser:用于服務器body的內容解析

服務器

actions/loadInfo.js
一個簡單的時間加載信息仅叫,用于測試。非常簡單糙捺,僅僅就是返回一個Promise的信息

export default function loadInfo(){
  return Promise.resolve({
    message:'This came from the api server',
    time:Date.now()
  })
}

以后因為還要添加其他API接口诫咱,所以這里我們要編寫一個針對不同的url訪問不同API的能用函數(shù)utils/url.js

export default function mapUrl(availableActions={},url=[]){
  //錯誤url或沒有api接口時反回錯誤
  const notFound = {action:null,params:[]}
  if (url.length === 0 || Object.keys(availableActions).length === 0 ){
    return notFound
  }

  const reducer = (prev, current) => {
    if (prev.action && prev.action[current]) {
      return {action: prev.action[current], params: []}; // go deeper
    } else {
      if (typeof prev.action === 'function') {
        return {action: prev.action, params: prev.params.concat(current)}; // params are found
      } else {
        return notFound;
      }
    }
  };

  const actionAndParams = url.reduce(reducer,{action:availableActions,params:[]})

  return (typeof actionAndParams.action === 'function') ? actionAndParams : notFound

}

api.js
服務器入口文件,通過上面的mapUrl函數(shù)簡單的將urlaction對應起來洪灯。

import express from 'express';
import bodyParser from 'body-parser';

import mapUrl from './utils/url'
import * as actions from './actions'
import config from '../config/appConfig'

const app = express()


app.use(bodyParser.json());

app.use((req,res) =>{


  //比如請求url為/loadInfo/param1/param2?user=John 結果為['loadInfo','pamam1','param2']
  const splitteUrlPath = req.url.split('?')[0].split('/').slice(1)
  const {action, params} = mapUrl(actions,splitteUrlPath)

  if(action){
    action(req,params)
      .then((result) => {
        if (result instanceof Function){
          result(req)
        }else{
          res.json(result)
        }
      },(reason) => {
          if(reason && reason.redirect){
            reason.redirect(reason.redirect)
          }else{
            res.status(reason.status || 500).json(reason)
          }
      })
  }else{
    res.status(404).end('Not Found')
  }
})

if(config.apiPort){
  app.listen(config.apiPort,(err)=>{
    if (err) { console.log(err)}
    console.log('Api server listen at %s', config.apiPort)
  })
}

最后在package.json里添加啟動命令坎缭,然后訪問http://localhost:3030看到反回的時間,說明我們的服務器正常運行

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末签钩,一起剝皮案震驚了整個濱河市掏呼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铅檩,老刑警劉巖憎夷,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柠并,居然都是意外死亡岭接,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門臼予,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啃沪,你說我怎么就攤上這事粘拾。” “怎么了创千?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵缰雇,是天一觀的道長入偷。 經(jīng)常有香客問我,道長械哟,這世上最難降的妖魔是什么疏之? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮暇咆,結果婚禮上锋爪,老公的妹妹穿的比我還像新娘。我一直安慰自己爸业,他們只是感情好其骄,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扯旷,像睡著了一般拯爽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钧忽,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天毯炮,我揣著相機與錄音,去河邊找鬼耸黑。 笑死桃煎,一個胖子當著我的面吹牛,可吹牛的內容都是我干的崎坊。 我是一名探鬼主播备禀,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奈揍!你這毒婦竟也來了曲尸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤男翰,失蹤者是張志新(化名)和其女友劉穎另患,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛾绎,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡昆箕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了租冠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹏倘。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖顽爹,靈堂內的尸體忽然破棺而出纤泵,到底是詐尸還是另有隱情,我是刑警寧澤镜粤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布捏题,位于F島的核電站玻褪,受9級特大地震影響,放射性物質發(fā)生泄漏公荧。R本人自食惡果不足惜带射,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望循狰。 院中可真熱鬧窟社,春花似錦、人聲如沸晤揣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昧识。三九已至钠四,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跪楞,已是汗流浹背缀去。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甸祭,地道東北人缕碎。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像池户,于是被迫代替她去往敵國和親咏雌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內容