使用node.js模擬接口返回數據

如何使用node.js來快速搭建自己想要的測試數據。模擬接口返回數據。

首先我們需要先搭建好環境:先把node.js下載

Node.js安裝包及源碼下載地址爲:https://nodejs.org/en/download/。大家根據自己的系統選擇下載就行

Node.js下載界面

下載後安裝,安裝過程非常簡單,直接下一步,在第五步時選擇第三個選項即可,

大家也可以按照這個Node.js安裝教程過程來,安裝完成後,我們來到cmd命令行工具中,進入安裝目錄下(直接打開安裝的文件路徑,然後在地址欄輸入cmd就直接進入了當前目錄下)

 

node安裝目錄

如上兩圖所示:第一個爲node安裝目錄,找到後再上方地址欄中輸入cmd(如第二圖)然後回車,就會進入dos命令窗口,並且在node安裝路徑下。

爲了檢查node是否安裝成功,我們可以再dos中輸入 node -v 查看版本號,如果能成功查看錶明安裝成功。

然後我們全局安裝npm: dos窗口中輸入  npm install -g npm  回車

成功安裝圖

然後在輸入 npm install -g cnpm  回車

成功安裝圖

成功安裝後再安裝  express 應用程序生成器

dos窗口中 輸入npm install -g express-generator  回車

成功安裝後截圖

接下來就是重點了:這一步我們會安裝一個express應用程序,你可以先選好安裝在什麼位置,取什麼名字

 

比如我這裏安裝在D盤myprogram\nodejs文件夾下的express文件夾中,取名爲lbin。那麼首先我們需要在dos中進入D:\myprogram\nodejs\express目錄

到這個目錄後我們輸入命令:express --view=pug lbin 回車,等待成功後,在dos窗口中會看到如下輸出信息

 

這時候我們看文件夾,你會看到你選擇的安裝目錄下多了個lbin文件(如下圖)

我們切換到dos窗口,你會看到下方提示我們安裝東西,我們按照提示安裝即可

先在dos窗口中輸入cd lbin回車

然後 輸入 npm install 回車

然後就可以啓動項目了:輸入 npm start  回車

啓動

這個時候你就可以在瀏覽器中輸入localhost/3000,見證神奇的時候到了

看到這個就證明你成功啦!開不開心!哈哈,彆着急,我們還有事情需要做。

打開lbin項目,你看到的目錄如下圖所示:

lbin項目原始目錄

這個時候,瀏覽器打開localhost:3000/users,可以看到頁面顯示respond with a resource

我們好奇找到users文件,在routes目錄下,然後打開,

routes/users.js文件

我們可以在routes/users.js文件中自定自己想要得到的返回數據

修改

var express = require('express');

var router = express.Router();

//新增數據

var data = {

    'code':'200',

    'message':'數據獲取成功',

    'lists':[

        {

          'name':'lbin',

            'age': '23',

            'sex':'男'

        },{

          'name':'lbin8',

            'age': '20',

            'sex':'女'

        }

    ]

}

/* GET users listing. */

router.get('/', function(req, res, next) {

  res.send(data);  //修改

});

module.exports = router;

改後之後,因爲有緩存的原因,我們需要重新啓動node(dos進入項目根目錄下,重新運行npm start),然後打開

成功獲取數據

到這裏就算基本完成啦,但是就這樣的話,你會發現每次都要來修改這個文件,修改後都需要重新啓動,非常的不方便。接下來我們就來繼續改進。在項目下新建一個config文件夾並新建一個api.js,配置一下:

api.js內容如下:

var fs = require('fs');

/**

* 檢查請求的路徑是否存在

* @param apiName 請求路徑

* @param method  請求方式

* @param params  請求參數

* @param res 返回請求

*/

function getDataFromPath (apiName,method,params,res){

    if(apiName){

        fs.access(

            // 提取請求路徑中的js文件

            apiName.substring(1)+'.js',

            // 回調函數,檢查請求的路徑是否有效失敗返回一個錯誤參數

            function(err){

                if(!err){

                    // 每次請求都清除模塊緩存重新請求

                    delete require.cache[require.resolve('..'+apiName)];

                    try{

                        addApiResult(res,require('..'+apiName).getData(method,params));

                    }catch(e){

                        console.error(e.stack);

                        res.status(500).send(apiName+' has an error,please check the code.');

                    }

                }else{

                    addApiResult(res);

                }

            }

        );

    }else{

        addApiResult(res);

    }

};

/**

*  響應頭

* @param res

*/

function addApiHead(res){

    res.setHeader('Content-Type', 'application/json;charset=utf-8');

    // 跨域

    res.header('Access-Control-Allow-Origin', '*');

    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');

    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');

    // 控制http緩存

    res.header("Cache-Control", "no-cache, no-store, must-revalidate");

    res.header("Pragma", "no-cache");

    res.header("Expires", 0);

}

/**

* 返回參數,如無返回參數返回404

* @param res

* @param result

*/

function addApiResult(res,result){

    if(result){

        res.send(result);

    }else{

        res.status(404).send();

    }

}

/*請求方式*/

// get

exports.get = function(req, res){

    addApiHead(res);

    getDataFromPath(req.path,'GET',req.query,res);

};

// post

exports.post = function(req, res){

    addApiHead(res);

    getDataFromPath(req.path,'POST',req.body,res);

};

 

然後打開根目錄下app.js文件,在上面引入剛剛新建的文件api.js

//引入APIvar api =require('./config/api');

並替換配置

/*配置請求*/

app.get('/',function(req, res){

 res.send('hello world');});

app.get('/api/*', api.get);

app.post('/api/*', api.post);

下方分別爲修改之前和修改之後的內容

原始app.js文件內容

 

修改後app.js 文件內容

然後我們在根目錄新建api文件夾,在其中新建test.js;

 

test.js文件中寫上你想要的數據即可。

exports.getData = function(method,data){

    var backData={

        "success":'true',

        "code":'000',

        "message":"",

        "data":{

        "total":'2',

        "users":[

        {

                    'name':'lbin',

                    'age': '23',

                    'sex':'男'

        },

            {

                    'name':'libin8',

                    'age': '20',

                    'sex':'女'

        }

        ]}

    }

    return JSON.stringify(backData);

}

這裏完成後,你就可以重新運行npm start,如果這個時候能成功運行,在瀏覽器打開http://localhost:3000/api/test,你就會看到返回的json。

 

成功啓動

我們看到成功啓動了,如果出現了錯誤的話,大家對應解決然後在啓動就好。在瀏覽器打開http://localhost:3000/api/test,會看到成功的出來數據啦!

這個時候,你想添加其他數據,只需要在api目錄下去新建其他.js文件就可以啦!添加後可以直接訪問的哦。

如果你想完全模仿線上的接口,你只需要一層層的建立文件夾就ok啦!假如線上接口是 http://www.lbin.com/api/recognition/face/shopping_guide/task_list,我們在api文件夾按照路徑新建文件夾和文件即可:api-->recognition-->face-->-->shopping_guide-->task_list.js

如果你想用android studio來測試下數據,你只需要把localhost替換成你本機電腦的ip就ok啦,例如:

http://192.168.x.xxx:3000/api/test  (把這個ip地址換成你本機的)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章