如何通过 RESTful GET 请求获取指定用户数据

本文介绍如何使用 express 构建一个 restful 接口,通过 url 路径参数(如 `/user/5`)接收用户 id,并从数据库中查询并返回对应用户信息,同时支持直接在浏览器中访问调试。

要实现类似 http://localhost:3000/user/5 这样的浏览器可访问接口,并返回结构化用户信息(例如 User id: 5 Name: Ann),需完成以下三步:定义路由、处理参数、查询数据库并响应。

✅ 正确的路由定义与参数提取

使用 Express 的路径参数语法 :id 捕获动态 ID,推荐将路由统一设计为语义清晰的 /users/:id(复数形式符合 REST 规范):

const express = require('express');
const router = express.Router();
const User = require('./models/User'); // 假设使用 Mongoose 模型

router.get('/users/:id', async (req, res) => {
  try {
    const { id } = req.params; // 自动解析 URL 中的 :id(如 /users/5 → id = '5')

    // 注意:若 ID 是 ObjectId(MongoDB),需验证格式有效性
    if (!mongoose.Types.ObjectId.isValid(id)) {
      return res.status(400).send('Invalid user ID format');
    }

    const user = await User.findById(id);
    if (!user) {
      return res.status(404).send('User not found');
    }

    // 返回简洁友好的 HTML 响应(适配浏览器直接访问)
    res.send(`
      

User details

User id: ${user._id} Name: ${user.name || 'N/A'}

← Back to all users `); } catch (err) { console.error(err); res.status(500).send('Internal server error'); } }); module.exports = router;

⚠️ 关键注意事项

  • ID 类型校验:MongoDB 的 _id 是 ObjectId,直接传字符串 ID 查询前务必用 mongoose.Types.ObjectId.isValid() 验证,否则可能静默返回 null。
  • 错误处理必须显式:避免 res.send(err) 暴露敏感堆栈信息;生产环境应记录日志并返回通用错误页或 JSON 错误对象。
  • 浏览器友好输出:res.send() 默认发送纯文本,若希望浏览器渲染为 HTML,请确保内容含合法 HTML 标签(如上例),或设置 res.set('Content-Type', 'text/html')。
  • API 与视图分离建议:长期项目中,建议 /api/users/:id 返回 JSON(供前端调用),另用模板引擎(如 EJS)渲染 HTML 页面——本例为快速验证,采用内联 HTML。

✅ 启动服务并测试

确保已挂载路由(如 app.use('/users', userRouter)),启动服务后,在浏览器访问:
? http://localhost:3000/users/5
即可看到格式化的用户详情页。

总结:一个健壮的用户详情 GET 接口 = 正确路径参数 + 数据库安全查询 + 分层错误处理 + 适当的响应格式。遵循此模式,即可轻松扩展为完整用户管理 API。