1) 首先安裝node
可以參考菜鳥教程node.js安裝配置拼坎,或者自行搜索安裝教程争便,訪問官網(wǎng)下載慢的這里提供node-v8.40.msi安裝包下載级零,百度網(wǎng)盤地址鏈接:https://pan.baidu.com/s/1boWTBQn密碼: w32w;
安裝node 會自動安裝npm包管理工具滞乙;
檢查是否有安裝node和 npm包管理工具奏纪,打開cmd命令行工具,輸入node -v和npm -v酷宵,會輸出對應(yīng)的版本號亥贸,如下所示:
C:\Users\liuzk$ node -vv8.4.0C:\Users\liuzk$ npm -v5.3.0
全局安裝 npm ,最好同時安裝cnpm 淘寶npm鏡像躬窜,如果npm 安裝依賴包的時候報錯浇垦,有時候是網(wǎng)絡(luò)不好,可以使用淘寶鏡像cnpm來安裝荣挨;
npm install -g npm
npm install -g cnpm
2)安裝express應(yīng)用程序生成器
全局安裝express-generator;
npm install -g express-generator
有安裝Git Bash Here等第三方命令行工具男韧,我們打開文件管理,進(jìn)入到想要生成項目的位置后默垄,右鍵打開Git Bash Here 就可以在當(dāng)前位置啟動命令行工具了此虑;
如果沒有安裝git等第三方cmd命令行工具,我們打開文件管理口锭,進(jìn)入到想要生成項目的位置后朦前,直接在地址欄輸入cmd介杆,會在當(dāng)前目錄打開cdm命令行工具;
在我們想要的位置打開命令行工具之后韭寸,就可以開始以下步驟:
創(chuàng)建一個名為myapp的express應(yīng)用程序
express --view=pug myapp
成功后會自動在目標(biāo)位置創(chuàng)建一個名為myapp的項目并生成很多文件春哨,
在命令行最下面有提示,install dependencies: cd myapp && npm install然后run the app: npm start,我們按照提示來恩伺;
進(jìn)入myapp項目赴背;
cdmyapp
安裝package.json文件中的依賴;
npm install
網(wǎng)絡(luò)不好可以用cnpm安裝
cnpm install
運行項目
npm start
在瀏覽器輸入localhost:3000晶渠,會打開一個頁面顯示W(wǎng)elcome to Express凰荚,說明已經(jīng)成功啟動服務(wù)了。
3)配置
打開myapp項目褒脯,可以看到目錄是下面這樣的便瑟;
這個時候,瀏覽器打開localhost:3000/users,可以看到頁面顯示respond with a resource
打開routes 文件夾下的users看到以下代碼:
// routes/users.js文件varexpress =require('express');varrouter = express.Router();/* GET users listing. */router.get('/',function(req, res, next){? res.send('respond with a resource');});module.exports = router;
可以看到頁面顯示的內(nèi)容就是users.js文件中返回的內(nèi)容憨颠,我們定義自己想要返回的內(nèi)容胳徽。
var express = require('express');
var router = express.Router();
/* GET users listing. */
var data = {
? ? 'code':'000',
? ? 'message':'message消息',
? ? 'lists':[
? ? ? ? {
? ? ? ? ? 'naem':'小明',
? ? ? ? ? ? 'age': '12',
? ? ? ? ? ? 'sex':'男'
? ? ? ? },{
? ? ? ? ? 'naem':'小紅',
? ? ? ? ? ? 'age': '12',
? ? ? ? ? ? 'sex':'女'
? ? ? ? }
? ? ]
}
router.get('/', function(req, res, next) {
? res.send(data);
});
module.exports = router;
改了之后再請求沒有改變,查看命令行信息爽彤,304發(fā)現(xiàn)我們的請求給我們緩存了养盗;
GET /users 304 2.543 ms - -
我們重新啟動一下試試,刷新頁面返回:
{"code":"000","message":"message消息","lists": [? ? ? ? {"naem":"小明","age":"12","sex":"男"},? ? ? ? {"naem":"小紅","age":"12","sex":"女"}? ? ]}
這樣雖然可以請求适篙,但是有緩存問題往核,而且接口多的話每次都得配置一個路徑,太復(fù)雜嚷节,所以要封裝一下聂儒,重復(fù)使用,每次請求重新請求不加載緩存硫痰。
在項目下新建一個config文件夾并新建一個api.js,配置一下:
var fs = require('fs');
/**
* 檢查請求的路徑是否存在
* @param apiName 請求路徑
* @param method? 請求方式
* @param params? 請求參數(shù)
* @param res 返回請求
*/
function getDataFromPath (apiName,method,params,res){
? ? if(apiName){
? ? ? ? fs.access(
? ? ? ? ? ? // 提取請求路徑中的js文件
? ? ? ? ? ? apiName.substring(1)+'.js',
? ? ? ? ? ? // 回調(diào)函數(shù)衩婚,檢查請求的路徑是否有效失敗返回一個錯誤參數(shù)
? ? ? ? ? ? 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);
? ? }
};
/**
*? 響應(yīng)頭
* @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);
}
/**
* 返回參數(shù),如無返回參數(shù)返回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;
//引入APIvarapi =require('./config/api');
替換請求配置
/*配置請求*/app.get('/',function(req, res){? ? res.send('hello world');});app.get('/api/*', api.get);app.post('/api/*', api.post);
app.js最終代碼:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var app = express();
/*引入api*/
var api = require('./config/api');
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//配置請求
app.get('/', function(req, res){
? ? res.send('hello world');
});
app.get('/api/*', api.get);
app.post('/api/*', api.post);
module.exports = app;
根目錄新建api文件夾非春,新建demo.js;
var dataDemo={
? ? 'code':'000',
? ? 'message':'message消息',
? ? 'lists':[
? ? ? ? {
? ? ? ? ? ? 'naem':'小明',
? ? ? ? ? ? 'age': '12',
? ? ? ? ? ? 'sex':'男'
? ? ? ? },{
? ? ? ? ? ? 'naem':'小紅',
? ? ? ? ? ? 'age': '12',
? ? ? ? ? ? 'sex':'女'
? ? ? ? }
? ? ]
}
exports.getData = function(method,data){
? ? var backData={
? ? ? ? "code":'000',
? ? ? ? "msg":"",
? ? ? ? "data":dataDemo
? ? }
? ? if(method=='DELETE'){
? ? ? ? backData={
? ? ? ? ? ? "code":'999',
? ? ? ? ? ? "msg":"不支持DELETE方法"
? ? ? ? }
? ? }
? ? return JSON.stringify(backData);
}
重新運行npm start,瀏覽器打開localhost:3000缓屠,此時應(yīng)該顯示的是hello world奇昙;
打開localhost:3000/api/demo,頁面顯示
{"code":"000","msg":"","data": {"code":"000","message":"message消息","lists": [? ? ? ? ? ? {"naem":"小明","age":"12","sex":"男"},? ? ? ? ? ? {"naem":"小紅","age":"12","sex":"女"}? ? ? ? ]? ? }}
以上都成功了,那就說明配置成功了敌完,復(fù)制一個js文件命名為demo2.js,改動一下數(shù)據(jù)储耐,瀏覽器訪問localhost:3000/api/demo2應(yīng)該也是可以的;
4) 使用
假如線上接口是https://www.baidu.com/mydata/java/school/list,我們在api文件夾按照路徑新建文件夾和文件即可:
├── api│? └── mydata│? ? ? └── java│? ? ? ? ? └── school│? ? ? ? ? ? ? └──list.js