mongoDB报错Cannot find module '../build/Release/bson'

打算用nodejs写一个blog系统,发现nodejs还是存在很多的坑。在使用mongodb时遇到如下报错问题:

{ [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' } 
  js-bson: Failed to load c++ bson extension, using pure JS version

折腾了一番,最后是这样解决的:

找到 npm 的module mongodb ..node_modules\mongodb\node_modules\bson\ext\index.js

并并在catch块改变bson的js本版路径:

bson = require('../build/Release/bson');

变成

bson = require('../browser_build/bson');


如果发现连文件夹browser_biuild都没有的话(我的情况就是这样),直接复制文件:

..node_modules\bson\build\Release\bson

from

..node_modules\bson\browser_build\bson


at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] ... 40 common frames omitted Caused by: com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'command find requires authentication' on server localhost:27017 at com.mongodb.operation.FindOperation$1.call(FindOperation.java:707) ~[mongodb-driver-core-3.9.0.jar!/:na] at com.mongodb.operation.FindOperation$1.call(FindOperation.java:696) ~[mongodb-driver-core-3.9.0.jar!/:na] at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:462) ~[mongodb-driver-core-3.9.0.jar!/:na] at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:406) ~[mongodb-driver-core-3.9.0.jar!/:na] at com.mongodb.operation.FindOperation.execute(FindOperation.java:696) ~[mongodb-driver-core-3.9.0.jar!/:na] at com.mongodb.operation.FindOperation.execute(FindOperation.java:83) ~[mongodb-driver-core-3.9.0.jar!/:na] at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:179) ~[mongodb-driver-3.9.0.jar!/:na] at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:132) ~[mongodb-driver-3.9.0.jar!/:na] at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:86) ~[mongodb-driver-3.9.0.jar!/:na] at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:2674) ~[spring-data-mongodb-2.1.6.RELEASE.jar!/:2.1.6.RELEASE] ... 74 common frames omitted 是什么意思
最新发布
08-09
<think>这个错误堆栈表明在Spring应用中使用MongoDB时发生了认证失败。核心错误信息是: **`Caused by: com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'command find requires authentication' on server localhost:27017`** ### 错误原因分析: 1. **认证缺失**: MongoDB服务器启用了访问控制(即需要用户名密码登录),但客户端连接时未提供有效凭证。错误代码 `13` 对应 MongoDB 的 "Unauthorized" 错误。 2. **堆栈上下文**: - 应用尝试执行数据库查询(如 `find` 操作)时触发。 - Spring Data MongoDB 的 `MongoTemplate` 在底层调用 MongoDB 驱动时失败。 - 连接地址指向 `localhost:27017`(默认地址),但未通过认证。 ### 解决方案: 1. **检查MongoDB服务配置**: 确认MongoDB是否已启用认证(通常在配置文件中设置 `security.authorization: enabled` 或启动时加 `--auth` 参数)。 2. **配置Spring连接凭证**: 在Spring应用的配置文件中(如 `application.properties`)添加认证信息: ```properties spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=your_db spring.data.mongodb.username=your_user spring.data.mongodb.password=your_password ``` 3. **验证用户权限**: 确保指定用户对目标数据库有查询权限(如 `read` 或 `readWrite` 角色)。 ### 其他可能原因: - 用户名/密码错误。 - 用户角色未分配至目标数据库。 - 连接字符串格式错误(如未指定认证源数据库)。 §§相关问题§§ 1. 如何在MongoDB中创建用户并分配数据库权限? 2. Spring Boot如何配置MongoDB连接字符串(URI格式)包含认证信息? 3. 如何检查MongoDB服务器是否启用了认证模式? 4. 除了认证失败,还有哪些常见原因会导致MongoDB的`command find`操作失败? 5. 在Spring Data MongoDB中,如何全局捕获并处理`MongoQueryException`异常?</think>这个错误堆栈表明在 Spring 应用中使用 MongoDB 时发生了认证失败。核心错误信息是: **`Caused by: com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'command find requires authentication' on server localhost:27017`** ### 错误原因解析: 1. **认证缺失** MongoDB 服务器启用了访问控制(需要用户名/密码登录),但应用连接时未提供有效凭证。错误代码 `13` 是 MongoDB 的 "Unauthorized" 错误。 2. **操作触发点** - 应用尝试执行 `find()` 查询操作(`FindOperation.execute`) - Spring Data MongoDB 的 `MongoTemplate` 在初始化时触发此操作(`postProcessBeforeInitialization`) - 连接地址为 `localhost:27017`(默认地址) 3. **堆栈层级** - 底层:MongoDB 驱动拒绝未认证的查询(`mongodb-driver-core`) - 中间层:Spring Data MongoDB 操作失败(`spring-data-mongodb`) - 上层:Spring Bean 初始化过程被中断(`spring-beans`) ### 解决方案: 1. **检查 MongoDB 认证配置** - 确认 MongoDB 服务是否启用了 `--auth` 参数或配置了 `security.authorization: enabled` - 验证目标数据库是否存在有效用户(通过 `mongo shell` 执行 `db.getUsers()`) 2. **配置 Spring 连接凭证** 在 `application.properties` 中添加认证信息: ```properties spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=your_db spring.data.mongodb.username=your_user spring.data.mongodb.password=your_password ``` 3. **验证用户权限** 确保用户对目标数据库有 `find` 操作权限(例如分配 `read` 或 `readWrite` 角色)。 ### 常见关联问题: - 如果使用连接字符串,需包含认证数据库: `mongodb://user:pass@localhost:27017/dbname?authSource=admin`
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微个日光日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值