領(lǐng)導(dǎo)要求要是用node作為中間層,去請(qǐng)求后端的api,node層使用了koa2(2.5.1)框架,用來向?yàn)g覽器端提供接口,但在后臺(tái)沒開發(fā)完成的時(shí)候作為測(cè)試返回一些死數(shù)據(jù)就正常,但是當(dāng)接入了后端api的時(shí)候就返回不了了,瀏覽器端http狀態(tài)碼404。硬著頭皮使用node作為中間層,望大神輕噴。代碼如下
// node版本8.11.2
// router使用koa-router(7.1.1)
// 有使用 koa2-cors包作為跨域的處理
// node端http請(qǐng)求使用request(2.87.0)
router.post('/login', async (ctx, next) => {
console.log('方式是', ctx.request) // 有數(shù)據(jù)
console.log('數(shù)據(jù)是', ctx.request.body) // 有數(shù)據(jù)
console.log('賬號(hào)', ctx.request.body.name, '密碼', ctx.request.body.password) // 有數(shù)據(jù)
ctx.body = { // 最開始為了測(cè)試,只要點(diǎn)用了這個(gè)login接口就會(huì)返回這個(gè)數(shù)據(jù)是正常的,后面會(huì)注釋
code: 200,
msg: 'success'
}
/*
* 但是當(dāng)我在這個(gè)里面接入了request模塊之后就出問題了
* 代碼如下
*/
request({
url: 'http://xxx.55.41.71:9090/tokens',
method: "POST",
json: true, // 照搬網(wǎng)上一個(gè)例子,這個(gè)true是代表什么意思?
headers: {
"content-type": "application/json",
},
body: JSON.stringify({
'userName': ctx.request.body.name,
'password': ctx.request.body.password
})
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // 這邊在控制臺(tái)上是可以拿到這個(gè)body的
ctx.body = body // 這邊就是一直返回不出去,瀏覽器一直報(bào)錯(cuò)
}
})
})
如圖
如果當(dāng)我瀏覽器調(diào)用node層需要,node層的接口需要訪問三個(gè)接口,分別為A,B,C 只有當(dāng)A,B C三個(gè)接口都拿到數(shù)據(jù)了才能返給瀏覽器(假設(shè)沒有依賴關(guān)系),有沒有類似于all的方法?
你在requrest的回調(diào)里設(shè)置ctx.body,回調(diào)的時(shí)候請(qǐng)求已經(jīng)返回了。
你應(yīng)該用async/await,類似這樣:
const request = require('request-promise-native');
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
let res = await request("https://www.mocky.io/v2/5185415ba171ea3a00704eed")
ctx.body = res
});
app.listen(3000);
request有promise封裝:request-promise-native。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。