
本文介绍如何使用 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。