Node.js 中使用fetch 按JSON格式發post請求的問題解析
Node.js 中使用fetch 按JSON格式發post請求
最近在測試一個api,可以用curl命令直接訪問,指定header相關配置,request body(JSON),成功後返回一個JSON。
原本想搞個靜態頁面html,在script標簽裡用fetch做個簡單的demo的,結果就遇到跨域問題。遂使用後端請求,就想到瞭Nodejs。
既然有現成的工具,那就使用唄。
環境node –version: 18.15.0
1.全局安裝express-generator:
npm i express-generator -g
2.生成一個測試項目:
express nodepost
3. 安裝依賴
cd nodepostnpm install
4.試運行(沒有意外的話可以在瀏覽器輸入 localhost:3000,看到Express 歡迎頁)
npm start
5. VSCODE編輯
code .
6.修改routers/index.js, 增加以下代碼段,註意按你實際配置來(url, requestData, authkey…)
router.get('/json', (req, res, next) => { let success = true; const data = { k: 'your real data' }; fetch('https://example.com/api/g', { method: 'POST', body: JSON.stringify(data), headers: { 'Content-type': 'application/json; charset=UTF-8', 'Authorization': 'your real auth key if neccessory, otherwise you could not config this item', }, } ).then((res) => res.json()) .then((json) => console.log(json)) .catch(err => { success = false; console.log('err:', err); }) res.json({ success }) });
7.訪問 localhost:3000/json, 不出問題的話能在後端控制臺查看請求結果
PLUS:
選擇新版本的Node,不能低於17.5.0,否則不能直接使用fecth,在文末有補充說明。
低版本用node-fetch庫或者原生的http模塊, node-fetch我自己導入一直有問題,原生http模塊要寫不少東西,故不采用。
補充:寫 Node.js,終於能用 Fetch 發請求瞭
Node.js 支持 Fetch API
啦!
在以前,使用原生的 Node.js API
發送一個 HTTP 請求非常麻煩,你可能要寫下面的代碼:
const https = require('https') const options = { hostname: 'nodejs.cn', port: 443, path: '/todos', method: 'GET' } const req = https.request(options, res => { console.log(`狀態碼: ${res.statusCode}`) res.on('data', d => { process.stdout.write(d) }) }) req.on('error', error => { console.error(error) }) req.end()
所以通常,我們可能會引入一些第三方的 NPM
包,比如 axios、needle、node-fetch、request
這些。
在最新的 Node.js v17.5
版本中,增加瞭對 Fetch API
的支持,所以無需借助這些第三方 HTTP
請求庫啦。
Fetch API
可能大傢都比較熟悉瞭,他是當前最流行的跨平臺 HTTP Client API
,目前已經可以在瀏覽器和 Web/Service Workers
中運行,當前 Web 環境裡用到最多的請求方式應該就是它瞭。
Node.js
中的Fetch API
基於 Undici
實現,它提供瞭一個 WHATWG
標準接口來獲取資源,並且也是基於 Promise
的,使用方式基本和瀏覽器中一致,包括四個核心模塊:
fetch()
– 用於發起請求的函數Headers
類 – 用於處理請求頭和響應頭Request
類 – 表示傳入請求的實例Response
類 – 表示傳入響應的實例
const res = await fetch('https://www.conardli.top'); const json = await res.json(); console.log(json);
其實這並不是簡單的支持瞭一個新的原生 HTTP
請求庫那麼簡單,這意味著很多之前在 Web
中用到 Fetch
的 NPM
包也可以在 Node.js
裡以同樣的方式工作瞭,這些包同樣可以實現跨平臺兼容瞭~
在 Node.js v17.5
中,它還是個實驗特性,現在想要試用的話可以通過 node --experimental-fetch flag
開啟。
Fetch
的優勢在於它是原生支持,並且可以兼容多平臺,其他的請求庫估計都要慢慢的靠邊站瞭~ 對此你有啥看法?
到此這篇關於Node.js 中使用fetch 按JSON格式發post請求的文章就介紹到這瞭,更多相關Node.js fetch post請求內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- fetch網絡請求封裝示例詳解
- vue網絡請求方案原生網絡請求和js網絡請求庫
- Javascript讀取json文件方法實例總結
- 關於React Native使用axios進行網絡請求的方法
- JavaScript實現請求服務端接口方法詳解