Node.js发送HTTP请求的实用方法

在开发一些自动化脚本或后端服务时,经常需要让程序主动去获取外部接口的数据。比如你写了个监控工具,想定时检查某个网站是否正常运行,或者你要从天气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这类第三方库更靠谱。