在开发一些自动化脚本或后端服务时,经常需要让程序主动去获取外部接口的数据。比如你写了个监控工具,想定时检查某个网站是否正常运行,或者你要从天气API拿数据展示在自己的页面上。这时候,用Node.js发送HTTP请求就成了一个很常见的需求。
使用内置的http模块
Node.js自带了http模块,不需要额外安装依赖就能发请求。虽然用起来稍微麻烦点,但对简单任务完全够用。比如你想向某个地址发起GET请求:
const http = require('http');
http.get('http://example.com/api/data', (res) => {
let data = '';
res.on('data', chunk => {
data += chunk;
});
res.on('end', () => {
console.log(data);
});
}).on('error', (err) => {
console.error('请求出错:', err.message);
});
这种方式适合轻量场景,但处理POST请求或带请求头的时候代码会变得啰嗦。
推荐使用axios库
大多数实际项目中,大家更喜欢用axios。它语法简洁,支持Promise,还能自动处理JSON解析。先通过npm安装:
npm install axios
然后就可以轻松发起各种请求。比如调用一个用户信息接口:
const axios = require('axios');
async function getUser() {
try {
const response = await axios.get('https://api.example.com/user/123');
console.log(response.data);
} catch (error) {
console.error('请求失败:', error.message);
}
}
getUser();
如果要发送POST请求提交数据,也很直观:
const response = await axios.post('https://api.example.com/login', {
username: 'testuser',
password: '123456'
});
console.log(response.data);
设置请求头和超时时间
有些接口需要认证,比如带上token。这时候可以在请求中添加headers:
const response = await axios.get('https://api.example.com/protected', {
headers: {
'Authorization': 'Bearer your-token-here'
},
timeout: 5000 // 超时5秒
});
这样既能保证安全性,也能避免请求卡死。
实际工作中,选对工具能省不少事。如果你只是临时跑个测试,原生http模块凑合用;但要做稳定服务,axios这类第三方库更靠谱。