Appearance
第13章:Node.js 新手常见问题与避坑指南
13.1 高频错误1:模块导入失败(路径错误、模块未安装)
错误表现
- 运行时出现
Cannot find module 'xxx'错误 - 相对路径导入失败
解决方案
检查模块是否安装:
bashnpm list xxx # 如果未安装,运行 npm install xxx检查导入路径:
- 相对路径:使用
./或../开头 - 绝对路径:使用
__dirname或path模块
- 相对路径:使用
检查文件名大小写:
- Windows 系统文件名大小写不敏感,但 Node.js 模块系统区分大小写
- 确保导入路径的大小写与实际文件名一致
13.2 高频错误2:异步代码执行顺序错误(回调地狱、await使用不当)
错误表现
- 代码执行顺序与预期不符
- 出现
undefined或null值 - 回调函数嵌套过深(回调地狱)
解决方案
使用 Promise:
javascript// 回调方式 fs.readFile('file.txt', (err, data) => { if (err) throw err; console.log(data); }); // Promise 方式 const fs = require('fs').promises; fs.readFile('file.txt') .then(data => console.log(data)) .catch(err => console.error(err));使用 async/await:
javascriptconst fs = require('fs').promises; async function readFile() { try { const data = await fs.readFile('file.txt'); console.log(data); } catch (err) { console.error(err); } } readFile();避免回调地狱:
- 使用 Promise 链式调用
- 使用 async/await
- 使用 Promise.all 处理并行操作
13.3 高频错误3:端口占用(解决方法:杀死进程、更换端口)
错误表现
- 启动服务器时出现
EADDRINUSE: address already in use错误
解决方案
查找占用端口的进程:
- Windows:bash
netstat -ano | findstr :3000 - Mac/Linux:bash
lsof -i :3000
- Windows:
杀死占用端口的进程:
- Windows:bash
taskkill /PID <进程ID> /F - Mac/Linux:bash
kill -9 <进程ID>
- Windows:
更换端口:
javascriptconst port = process.env.PORT || 3001; // 更换为不同的端口 app.listen(port, () => { console.log(`Server running on port ${port}`); });
13.4 高频错误4:文件路径错误(相对路径、绝对路径混淆)
错误表现
- 文件读写操作失败
- 出现
ENOENT: no such file or directory错误
解决方案
使用绝对路径:
javascriptconst path = require('path'); const filePath = path.join(__dirname, 'data', 'file.txt');理解相对路径:
- 相对路径是相对于当前工作目录(
process.cwd()),而不是相对于文件所在目录 - 推荐使用
__dirname来构建绝对路径
- 相对路径是相对于当前工作目录(
检查路径分隔符:
- Windows 使用
\ - Mac/Linux 使用
/ - 使用
path模块自动处理路径分隔符
- Windows 使用
13.5 高频错误5:跨域问题(CORS配置错误)
错误表现
- 浏览器控制台出现
Access-Control-Allow-Origin错误 - 前端无法获取后端API数据
解决方案
使用 CORS 中间件:
bashnpm install corsjavascriptconst cors = require('cors'); app.use(cors());手动设置 CORS 头:
javascriptapp.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); next(); });
13.6 调试技巧:Node.js调试方法(VS Code调试、console打印)
VS Code 调试
创建调试配置:
- 点击 VS Code 左侧的调试图标
- 点击 "创建 launch.json 文件"
- 选择 "Node.js"
设置断点:
- 在代码行左侧点击设置断点
- 启动调试模式
查看变量:
- 在调试面板中查看变量值
- 使用 "监视" 功能监视特定变量
Console 打印
基本打印:
javascriptconsole.log('Hello World');格式化打印:
javascriptconsole.log('Name: %s, Age: %d', name, age);对象打印:
javascriptconsole.log('Object:', obj); console.dir(obj, { depth: null }); // 打印完整对象错误打印:
javascriptconsole.error('Error:', error);性能计时:
javascriptconsole.time('Task'); // 执行任务 console.timeEnd('Task');
