You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()即可。

二、终端能打印数据但无法存入数据库

终端能打印出商品名称、价格等数据,说明前端请求的数据已经成功传到了后端,但数据库写入环节出了问题,你可以按以下步骤排查:

  1. 检查数据库连接状态
    确认你的数据库连接代码是否正常建立了连接,有没有捕获连接错误。比如用mongoose的话,可以在连接代码里加错误监听:

    mongoose.connect('你的数据库地址')
      .then(() => console.log('数据库连接成功'))
      .catch(err => console.error('数据库连接失败:', err));
    

    如果连接失败,终端会打印错误信息,根据提示修复连接问题(比如地址错误、用户名密码不对、数据库服务没启动)。

  2. 检查数据库操作代码是否完整

    • 如果是用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);
      });
      
  3. 检查字段匹配与数据类型
    确认你传入的字段名和数据库表的字段名完全一致(比如数据库表是product_name,你代码里写的是name,就会导致字段不匹配),同时检查数据类型是否符合要求(比如价格字段是数字类型,你传入的是字符串,可能会被数据库拒绝或者自动转换失败)。

  4. 检查数据库权限
    确认你用来连接数据库的用户拥有写入权限,有些数据库用户默认只有只读权限,会导致无法插入数据。

  5. 捕获所有可能的错误
    在数据库操作的代码里加上完整的错误捕获,不要忽略任何错误信息。很多时候错误信息会直接告诉你问题所在,比如字段不存在、数据类型错误、外键约束失败等。


内容的提问来源于stack exchange,提问作者user8812816

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:14:20