Node.js学习遇DEP0096警告,添加路由数据无法存入数据库求助
解决Node.js学习中的两个问题:Deprecation警告与数据库数据存入失败
一、关于timers.unenroll()废弃警告
这个警告是因为你使用的nodemon(或某个依赖包)调用了Node.js已废弃的timers.unenroll() API,Node.js官方建议改用clearTimeout()替代。不过这个警告本身不会影响服务器运行,只是提示你依赖的代码需要更新。
解决方法:
- 先更新
nodemon到最新版本:在终端执行npm update nodemon -g(全局更新)或者npm update nodemon --save-dev(项目本地更新),新版本的nodemon应该已经修复了这个废弃API的使用。 - 如果更新后还是出现警告,检查你自己的代码里有没有直接调用
timers.unenroll(),如果有的话,把它替换成clearTimeout()即可。
二、终端能打印数据但无法存入数据库
终端能打印出商品名称、价格等数据,说明前端请求的数据已经成功传到了后端,但数据库写入环节出了问题,你可以按以下步骤排查:
检查数据库连接状态
确认你的数据库连接代码是否正常建立了连接,有没有捕获连接错误。比如用mongoose的话,可以在连接代码里加错误监听:mongoose.connect('你的数据库地址') .then(() => console.log('数据库连接成功')) .catch(err => console.error('数据库连接失败:', err));如果连接失败,终端会打印错误信息,根据提示修复连接问题(比如地址错误、用户名密码不对、数据库服务没启动)。
检查数据库操作代码是否完整
- 如果是用ORM(比如mongoose),确保你调用了
save()方法,并且处理了异步操作:
很多新手会忘记调用const product = new Product({ name: 'xxx', price: 40 }); // 一定要调用save,并且处理Promise或者回调 product.save() .then(() => console.log('数据存入成功')) .catch(err => console.error('存入失败:', err));save(),或者没有处理异步错误,导致看起来数据没问题但实际没写入。 - 如果是用原生SQL(比如mysql),确保你执行了
query语句,并且检查回调里的错误:const sql = 'INSERT INTO products (name, price) VALUES (?, ?)'; db.query(sql, ['xxx', 40], (err, result) => { if (err) { console.error('插入失败:', err); return; } console.log('插入成功,影响行数:', result.affectedRows); });
- 如果是用ORM(比如mongoose),确保你调用了
检查字段匹配与数据类型
确认你传入的字段名和数据库表的字段名完全一致(比如数据库表是product_name,你代码里写的是name,就会导致字段不匹配),同时检查数据类型是否符合要求(比如价格字段是数字类型,你传入的是字符串,可能会被数据库拒绝或者自动转换失败)。检查数据库权限
确认你用来连接数据库的用户拥有写入权限,有些数据库用户默认只有只读权限,会导致无法插入数据。捕获所有可能的错误
在数据库操作的代码里加上完整的错误捕获,不要忽略任何错误信息。很多时候错误信息会直接告诉你问题所在,比如字段不存在、数据类型错误、外键约束失败等。
内容的提问来源于stack exchange,提问作者user8812816
相关产品推荐
相关产品推荐

