Node 发送 HTTP请求
1、发送GET请求
如果你有自定义的需求,可以访问官网:
HTTP | Node.js v12.22.7 Documentation
let http = require('http');
// 格式化返回的参数 对json格式的数据进行格式化
function formatResData(data, headers) {let type = headers['content-type'];if (!type || type && type.indexOf('application/json') !== -1) {if (typeof data === 'string') {try {data = JSON.parse(data);} catch (e) { /* Ignore */ }}}return data;
}
// 封装get请求
function get(url, headers = {}) {return new Promise((resolve, reject) => {const options = {headers: headers};const req = http.get(url, options, res => {let had = false;res.setEncoding('utf8');// 监听返回的数据res.on('data', (chunk) => {had = true;// 数据格式化res.data = formatResData(chunk, res.headers);resolve(res);});// 监听接口请求完成, 除非error,最终都会执行end;res.on('end', () => {if (had) return;resolve(res);});});req.on('error', e => {reject(e);});}).catch(e => {console.error('Request error: ' + url + ', Method:' + 'GET' + ',Error message:', e);throw new Error(e ? e : 'Request error');})
}
// 调用示例
let headers = {Cookie: 'xxxxxx'
};
get('http:xxxxxx', headers).then(res => {// res.statusCode为接口返回的状态码, res.data为接口返回的数据console.log(res.statusCode, res.data);
});
2、发送POST请求
如果你有自定义的需求,可以访问官网:
HTTP | Node.js v12.22.7 Documentation
let http = require('http');
// 封装POST请求
function post(url, data, headers = {}) {return new Promise(resolve => {const options = {method: 'POST',headers: headers};const req = http.request(url, options, res => {let had = false;res.setEncoding('utf8');res.on('data', (chunk) => {had = true;// 当接口返回的是json格式数据时可以使用JSON.parseres.data = formatResData(chunk, res.headers);resolve(res);});// 监听接口请求完成, 除非error,最终都会执行end;res.on('end', () => {if (had) return;resolve(res);});});req.on('error', e => {reject(e);});// 写入请求的数据data && req.write(data);req.end();}).catch(e => {console.error('Request error: ' + url + ', Method:' + 'GET' + ',Error message:', e);throw new Error(e ? e : 'Request error');})
}
// 调用示例
let data = {name: 'xxx'
}
// 发送form表单格式数据
data = qs.stringify(data);
// 设置请求头(Content-Type)为form表单格式
let headers = {'Content-Type': 'application/x-www-form-urlencoded','Cookie': 'xxxxx'
};
post('http:xxx', data, headers).then(res => {// res.statusCode为接口返回的状态码, res.data为接口返回的数据console.log(res.statusCode, res.data);
})
3、node开启的服务支持跨域
如果你需要在请求头接受cookie和Token进行权限验证,'Access-Control-Allow-Headers'里面需要添加Set-Cookie和接受的请求头名称,例如下面的例子中Authorization为接受的请求头名称。
var app = express();
// 允许跨域
app.use((req, res, next) => {res.set({'Access-Control-Allow-Credentials': true, //允许后端发送cookie'Access-Control-Allow-Origin': req.headers.origin || '*', //任意域名都可以访问,或者基于我请求头里面的域'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Set-Cookie,Authorization', //设置请求头格式和类型'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS',//允许支持的请求方式'Content-Type': 'application/json; charset=utf-8'//默认与允许的文本格式json和编码格式})req.method === 'OPTIONS' ? res.status(200).end() : next()
})
Node 发送 HTTP请求相关推荐
- Node.js发送HTTP请求
在Node.js中发送HTTP请求,用的比较多的是request组件,该组件的功能非常强大,但是该组件需要通过回调函数的方式获取操作的结果. 由于现在Node.js对ES6已经支持的比较好了,我们更希 ...
- 前端学axios还是ajax,【Web前端问题】axios发送ajax请求问题?
在程序里借助axios库发送ajax请求,但是失败了,返回这个 然而在同一个位置换成jquery的代码却能成功,代码如下,不知axios哪里写的不对??谢谢~ //axios axios.post(& ...
- Ionic+Angular+Express实现前后端交互使用HttpClient发送get请求数据并加载显示(附代码下载)
场景 Ionic介绍以及搭建环境.新建和运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166 在上面搭建起 ...
- promise的应用和在VUE中使用axios发送AJAX请求服务器
promise 用promise对函数封装: 原来的代码: <!DOCTYPE html> <html> <head><title>vue demo&l ...
- java在线支付---06,07,08_在线支付_编写将数据提交给易宝支付的JSP页面,集成和测试向易宝发送支付请求,实现浏览器自动向易宝发送支付请求
06_在线支付_编写将数据提交给易宝支付的JSP页面 -------------------------------------------------------------- 1./payment ...
- Java发送Http请求,解析html返回
今天是2008年7月7日星期一,下午一直在学校做个人开始页面.因为离不开google的翻译,所以想把google的翻译整合到我的开始页面中来,于是乎就遇到了一个问题,怎样使用java程序发送http请 ...
- Node中POST请求的正确处理方式
Node的 http 模块只对HTTP报文的头部进行了解析,然后触发 request 事件.如果请求中还带有内容部分(如 POST 请求,它具有报头和内容),内容部分需要用户自行接收和解析. 通过报头 ...
- axios发送网络请求
网络模块封装 选择什么网络模块 传统的Ajax 缺点:配置和调用方式等非常混乱 jQuery-Ajax 缺点:在Vue整个开发中都是不需要使用jQuery的 axios axios 功能特点: 在浏览 ...
- `SpringBoot`+`axios`结合发送`ajax`请求
SpringBoot+axios结合发送ajax 1.搭建环境 1.1 创建表并添加数据 DROP TABLE t_posts;CREATE TABLE IF NOT EXISTS t_posts(p ...
最新文章
- 参考例子,学习FuncT, TResult委托
- 若川知乎高赞:有哪些必看的 JS 库?
- 强大的CSS3动画库animate.css
- web前端复习系列[1]——标签
- C++设计模式-中介者模式
- Two-Stream RNN/CNN for Action Recognition in 3D Videos-阅读笔记
- python训练模型函数参数_keras读取训练好的模型参数并把参数赋值给其它模型详解...
- MySQL数据库分区的概念与2大好处(1)
- grunt入门讲解4:如何创建task(任务)
- 1.2 Illustrator多文档的几种排列方式
- 扫盲:Java 后端开发常用的 10 种第三方服务
- 大学计算机教程王梦倩,【经验共享】中国矿业大学资源学院辅导员王梦倩
- 最强内存稳定性测试软件,内存稳定性测试软件TM5
- Android绘图Porter-Duff规则
- Linux ALSA音频驱动一:音频系统概述
- Rabbitmq消息中心_消息中心总体方案
- c++ 实现线索二叉树
- 怪物猎人世界取得服务器信息,steam怪物猎人世界无法连接更新服务器 | 手游网游页游攻略大全...
- MySQL-5.6版本GTID的主从复制
- 虚拟机安装的系统界面很大的解决办法