Node.js 中使用fetch 按JSON格式发post请求的问题解析
作者:loseran
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请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!