«

Node.js中使用fetch按JSON格式发post请求的问题怎么解决

时间:2024-4-27 09:33     作者:韩俊     分类: Javascript


本文小编为大家详细介绍“Node.js中使用fetch按JSON格式发post请求的问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“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
开启。

标签: javascript

热门推荐