nodejs之koa2請(qǐng)求示例(GET,POST)
GET 請(qǐng)求
在 koa 中,GET請(qǐng)求獲取請(qǐng)求數(shù)據(jù)request對(duì)象中的 query 方法和 querystring 方法, query方法返回的是格式化好的參數(shù),querystring 方法返回的是請(qǐng)求字符串。廢話不多說,直接上代碼
app.js 中添加如下代碼:
router.get('/getData', async (ctx,next) => {
// 從上下文的request對(duì)象中獲取
let request = ctx.request;
let req_query = request.query; // 獲取格式化參數(shù)
let req_querystring = request.querystring; // 獲取字符串
// 從上下文中直接獲取
let ctx_query = ctx.query;
let ctx_querystring = ctx.querystring;
let obj = {
req_query:req_query,
req_querystring:req_querystring,
ctx_query:ctx_query,
ctx_querystring:ctx_querystring
};
ctx.response.body = {status:200,msg:'這是get測(cè)試的返回?cái)?shù)據(jù)',data:obj};
});
在index.html中引入jquery,因?yàn)橛胘query的ajax,然后添加如下代碼:
var getTest = () => {
$.ajax({
type:'GET',
url:'/getData?a=1&b=2&c=3',
dataType:'json',
success(data){
console.log(data);
},
error (err){
console.log(err);
}
});
}
// 添加一個(gè)按鈕
<button onclick="getTest()">點(diǎn)擊測(cè)試get方法</button>
運(yùn)行項(xiàng)目,點(diǎn)擊按鈕之后控制臺(tái)回打印出數(shù)據(jù),結(jié)果如下

POST 請(qǐng)求
因?yàn)?koa 沒有對(duì) post 請(qǐng)求獲取參數(shù)進(jìn)行封裝,所以需要通過原生的 nodejs 請(qǐng)求對(duì)象 req,將 post 請(qǐng)求數(shù)據(jù)解析成 string(例如:a=1&b=2&c=3),
再將 string 解析成 json 格式(例如:{“a”:”1”, “b”:”2”, “c”:”3”})
app.js 中添加如下代碼:
router.post('/postData',async (ctx,next) => {
let postData = await parsePostData(ctx);
console.log(postData);
ctx.response.body = {status:200,msg:'這是post測(cè)試的返回?cái)?shù)據(jù)',data: postData};
});
// 解析上下文里node原生請(qǐng)求的POST參數(shù)
function parsePostData( ctx ) {
return new Promise((resolve, reject) => {
try {
let postdata = "";
ctx.req.addListener('data', (data) => {
postdata += data
})
ctx.req.addListener("end",function(){
let parseData = parseQueryStr( postdata )
resolve( parseData )
})
} catch ( err ) {
reject(err)
}
})
}
// 將POST請(qǐng)求參數(shù)字符串解析成JSON
function parseQueryStr( queryStr ) {
let queryData = {}
let queryStrList = queryStr.split('&')
console.log( queryStrList )
for ( let [ index, queryStr ] of queryStrList.entries() ) {
let itemList = queryStr.split('=')
queryData[ itemList[0] ] = decodeURIComponent(itemList[1])
}
return queryData
}
index.html中添加如下代碼:
var postTest = () => {
let obj = {
name:'啦啦啦',
description:'我是賣報(bào)的小行家'
};
$.ajax({
type:'POST',
url:'/postData',
dataType:'json',
data:obj,
success(data){
console.log(data);
},
error (err){
console.log(err);
}
});
}
// 添加一個(gè)post請(qǐng)求的按鈕
<button onclick="postTest()">點(diǎn)擊測(cè)試post方法</button>
運(yùn)行,點(diǎn)擊按鈕之后會(huì)打印出如下數(shù)據(jù)

對(duì)于一個(gè)用慣了 express 的我來說,這樣的 post 獲取參數(shù)方式令我非常的不爽,還好,koa-bodyparser 中間件解決了這個(gè)問題
koa-bodyparser
安裝
npm i koa-bodyparser –save
app.js 中引入模塊
// 引入模塊
const bodyParser = require('koa-bodyparser');
// 掛載到app
app.use(bodyParser());
然后將 post 方法更改為
router.post('/postData',async (ctx,next) => {
let postData = ctx.request.body;
ctx.response.body = {status:200,msg:'這是post測(cè)試的返回?cái)?shù)據(jù)',data: postData};
});
這樣就簡(jiǎn)單的太多了,感覺賞心悅目,其結(jié)果跟上面的是一樣的。
至此,koa 請(qǐng)求方法介紹完畢,可以愉快的寫代碼了,下一篇,小弟就記錄一下koa的錯(cuò)誤處理。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
nodejs開發(fā)微信小程序?qū)崿F(xiàn)密碼加密
本文給大家分享的是在使用nodejs開發(fā)微信小程序的過程中,實(shí)現(xiàn)密碼加密的示例代碼,非常簡(jiǎn)單,有需要的小伙伴可以參考下2017-07-07
node.js使用免費(fèi)的阿里云ip查詢獲取ip所在地【推薦】
這篇文章主要介紹了node.js使用免費(fèi)的阿里云ip查詢獲取ip所在地的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-09-09
在nodejs中創(chuàng)建child process的方法
這篇文章主要介紹了在nodejs中創(chuàng)建child process的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Node發(fā)出HTTP POST請(qǐng)求的方法實(shí)例小結(jié)
這篇文章主要介紹了Node發(fā)出HTTP POST請(qǐng)求的方法,結(jié)合實(shí)例形式總結(jié)分析了三種常用的post請(qǐng)求操作方法,以及相關(guān)庫操作注意事項(xiàng),需要的朋友可以參考下2023-05-05
Ubuntu中搭建Nodejs開發(fā)環(huán)境過程分享
這篇文章主要介紹了Ubuntu中搭建Nodejs開發(fā)環(huán)境過程,比較郁悶的是apt-get安裝失敗了,如果有遇到一樣問題的朋友,可以參考一下本文2014-06-06
node將geojson轉(zhuǎn)shp返回給前端的實(shí)現(xiàn)方法
這篇文章主要介紹了node將geojson轉(zhuǎn)shp返回給前端的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

