JavaScript 代码审查:检查什么以及如何提供反馈

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JavaScript 中的 Code Review:检查什么以及如何提供反馈



Code review(代码审查)不仅仅是在合并拉取请求之前进行的正式检查。它是提高代码质量、在团队中分享知识以及在早期阶段预防错误的有力工具。在 JavaScript 和 Node.js 的世界中,异步性和动态类型创建了许多隐藏陷阱,因此熟练的审查变得至关重要。

在本文中,我们将分析在审查 JavaScript 代码时具体要注意什么,以及如何提供有用而非冒犯性的反馈。



1. 逻辑、架构和安全性

首先需要检查的是代码是否解决了既定任务。不要立即深入格式化问题。问自己几个问题:

  • 逻辑是否正确? 是否存在边界情况(edge cases)?如果传入 null、undefined 或空数组会发生什么?
  • 是否存在漏洞? 在 Node.js 中这一点尤其重要。检查是否将请求中的原始数据直接传递给了 SQL 查询(SQL 注入)或 eval()。是否使用了 HTML 清理器?
  • 架构是否得到遵守? 代码是否违反了 SOLID 原则?例如,一个函数是否做了太多事情?业务逻辑是否已从路由处理程序中分离出来?


// 不好:混合逻辑和 HTTP 层app.get('/user/:id', async (req, res) => {    const user = await db.query(`SELECT * FROM users WHERE id = ${req.params.id}`); // SQL 注入!    res.json(user);});

// 好:分离关注点const getUserById = async (id) => { if (!id || typeof id !== 'string') throw new Error('Invalid ID'); return await db.query('SELECT * FROM users WHERE id = $1', [id]);};app.get('/user/:id', async (req, res) => { const user = await getUserById(req.params.id); res.json(user);});


2. 异步性和 Promise 的使用

这是许多 JavaScript 开发者的致命弱点。在审查 Node.js 代码时,务必检查:

  • 错误处理。 所有异步函数是否都包裹在 try/catch 中?是否忘记了 Promise 的 .catch()?是否存在“孤儿”Promise(未处理的 Promise rejection)?
  • 正确使用 async/await。 是否在可以通过 Promise.all 并行运行 Promise 的地方使用了不必要的 await?
  • 竞态条件(race conditions)。 当对同一资源(例如文件或全局变量)进行并行请求时,代码是否可能执行不正确?


// 不好:顺序执行独立请求const user = await getUser(id);const posts = await getPosts(id);

// 好:并行执行const [user, posts] = await Promise.all([getUser(id), getPosts(id)]);

// 不好:忘记错误处理router.get('/data', async (req, res) => { const data = await fetchData(); // 如果 fetchData 失败,服务器也会“崩溃” res.json(data);});

// 好router.get('/data', async (req, res, next) => { try { const data = await fetchData(); res.json(data); } catch (error) { next(error); // 将错误传递给全局处理程序 }});


3. 代码质量、风格和命名

代码应该像一本好书一样易于阅读。即使逻辑正确,糟糕的风格也会拖慢未来的开发速度。

  • 变量和函数的命名。 名称应该回答“这是什么?”和“它做什么?”的问题。避免使用单字母变量(循环计数器除外)以及像 getUsrInf 这样的缩写。
  • 魔法数字和字符串。 它们是否被提取到常量中? const MAX_RETRIES = 3; 比直接使用数字 3 要清晰得多。

博客

书籍推荐