《Node.js 面试避坑:Express 常见问题误区与正确答案解析》

Node.js 面试避坑:Express 常见问题误区与正确答案解析

Express 作为 Node.js 的核心框架,面试中常因概念混淆或实践误区导致失分。以下是高频问题解析:


误区 1:中间件执行顺序无关紧要

❌ 错误认知

"中间件注册顺序不影响业务逻辑"
✅ 正确答案

中间件严格按注册顺序执行。例如认证中间件必须在路由前注册:

javascript 复制代码
// 正确顺序
app.use(authentication); // 1. 先认证
app.use("/api", router); // 2. 后路由

// 错误顺序:未认证即可访问路由
app.use("/api", router); 
app.use(authentication); 

误区 2:app.use()app.get() 可互换

❌ 错误认知

"两者都是注册中间件,功能相同"
✅ 正确答案

  • app.use():处理所有HTTP方法(GET/POST等)
  • app.get():仅处理GET请求
javascript 复制代码
// 正确场景
app.use("/static", express.static("public")); // 所有方法访问静态资源
app.get("/api/data", (req, res) => { ... });   // 仅响应GET请求

误区 3:忽略异步错误处理

❌ 错误认知

"try/catch 可捕获所有异步错误"
✅ 正确答案

Express 无法自动捕获异步错误,必须通过 next() 传递:

javascript 复制代码
// 正确写法
app.get("/", async (req, res, next) => {
  try {
    await asyncOperation();
  } catch (err) {
    next(err); // 传递错误到集中处理中间件
  }
});

// 集中错误处理(需注册在最后)
app.use((err, req, res, next) => {
  res.status(500).json({ error: err.message });
});

误区 4:路由参数(:id)无需校验

❌ 错误认知

":id 天然是合法ID,无需验证"
✅ 正确答案

必须验证参数格式,防止非法注入:

javascript 复制代码
// 正确做法:添加校验中间件
app.param("id", (req, res, next, id) => {
  if (!/^\d+$/.test(id)) {
    return res.status(400).send("Invalid ID");
  }
  next();
});

app.get("/user/:id", (req, res) => {
  // 安全使用 req.params.id
});

误区 5:res.send() 自动设置 Content-Type

❌ 错误认知

"任何数据调用 res.send() 都会自动设置正确的头部"
✅ 正确答案

  • 字符串:默认为 text/html
  • 对象/数组:默认为 application/json
    需显式指定类型
javascript 复制代码
// 返回XML需手动设置
res.type("application/xml");
res.send("<data><value>1</value></data>");

避坑总结
  1. 中间件顺序:按依赖关系严格排序
  2. 路由方法 :区分 app.use(全方法)和 app.get(单方法)
  3. 错误处理 :异步操作必须 next(err)
  4. 参数安全:路由参数强制校验格式
  5. 响应头部:非JSON数据显式指定 Content-Type

掌握这些核心点,可规避 80% 的 Express 面试陷阱。

相关推荐
万敏9 小时前
Vue3 全栈实战:第一阶段复盘(第1-8周)
vue.js·node.js·全栈
爱读源码的大都督10 小时前
DeepSeek面试官问:多租户 RAG 系统怎样实现细粒度权限控制?
后端·面试·架构
蒸蒸yyyyzwd10 小时前
机试和Redis学习笔记
c++·笔记·面试
一只叫煤球的猫11 小时前
Spring AI 2.0 源码解析(四):Prompt、Message、Options 的对象模型
后端·面试·ai编程
濮水大叔11 小时前
舒服了,CabloyJS 的 AI Spec 驱动开发会自动生成甘特图和燃尽图
typescript·node.js·vibecoding
IT大白鼠12 小时前
MySQL 分布式集群系列 · 第八篇(收官)——NDB 集群面试高频题 +架构总结与未来演进
分布式·mysql·面试
ShineWinsu12 小时前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询
letisgo512 小时前
JAVA 高级进阶02篇《并发编程三板斧:JMM、CAS与AQS的源码级拆解》
java·面试·并发编程·aqs·jmm
FungLeo13 小时前
成为全栈·Node 后端篇·部署上线:从本地起服到真正对外服务
node.js·后端部署·成为全栈
尾善爱看海14 小时前
Vue 面试进阶篇:Composition API、插槽、自定义指令……8 个章节 + 高频面试题全解析
前端·javascript·vue.js·面试·vue