0

0

javascript数据库怎么连接_如何使用MongoDB

狼影

狼影

发布时间:2026-01-11 15:58:02

|

569人浏览过

|

来源于php中文网

原创

javascript 无法直接连接 mongodb,node.js 中需用 mongodb 驱动通过 mongoclient 连接,浏览器端必须经后端 api 中转;常见错误多因环境配置而非代码问题,应复用 client 实例而非每次新建关闭。

javascript数据库怎么连接_如何使用mongodb

JavaScript 本身没有内置数据库连接能力,所谓“JS 连接数据库”实际是指在 Node.js 环境中通过驱动与 MongoDB 建立通信;浏览器端 JS 无法直连 MongoDB(出于安全限制),必须经由后端 API 中转。

Node.js 中用 mongodb 官方驱动连接 MongoDB

最常用、官方维护的方案是安装 mongodb npm 包(v6+),它基于 Node.jsnet.Socket 和现代 Promise API 实现连接管理。

  • 确保已安装 Node.js(≥18.0)和 MongoDB 服务(本地或 Atlas)
  • 运行 npm install mongodb
  • MongoClient 是入口类,connect() 返回 Promise,必须 await 或链式 .then()
  • 连接字符串格式为 mongodb://localhost:27017(本地)或 mongodb+srv://<user>:<pass>@cluster.xyz.mongodb.net</pass></user>(Atlas)
const { MongoClient } = require('mongodb');

const client = new MongoClient('mongodb://localhost:27017', {
  serverSelectionTimeoutMS: 5000,
});

async function run() {
  try {
    await client.connect(); // 必须调用,否则 db 实例不可用
    const db = client.db('myapp');
    const collection = db.collection('users');
    const result = await collection.find({}).toArray();
    console.log(result);
  } finally {
    await client.close(); // 生产环境建议复用 client,而非每次 close
  }
}
run();

常见连接失败错误及对应原因

看到 ServerSelectionErrorConnection timed outECONNREFUSED 时,基本不是代码写错,而是环境或配置问题。

  • connect ECONNREFUSED ::1:27017:MongoDB 服务未启动,或监听地址不是 127.0.0.1(检查 mongod --bind_ip 配置)
  • Server selection timed out after 5000 ms:网络不通(如防火墙拦截)、DNS 解析失败(Atlas 连接时注意是否用了 mongodb+srv:// 协议)、或集群状态异常
  • Authentication failed:用户名/密码错误,或未在连接字符串中指定 authSource(如 ?authSource=admin
  • Topology was destroyed:在 client.close() 后继续调用 db.collection() —— client 关闭后所有操作均失效

使用 mongoose 而非原生驱动的典型场景

当项目需要 schema 校验、中间件、虚拟字段、自动类型转换等 ODM 功能时,mongoose 是更合适的选择;但它不是“替代驱动”,而是在 mongodb 驱动之上封装的一层。

DoMore.ai
DoMore.ai

DoMore.ai 是一个个性化的 AI 工具目录

下载

立即学习Java免费学习笔记(深入)”;

  • mongoose.connect() 内部仍调用 MongoClient.connect(),所以连接参数(如超时、maxPoolSize)仍需传给它
  • 不要同时用 mongoose 和原生 mongodb 驱动操作同一连接池,容易引发竞争或泄漏
  • Schema 定义影响写入行为:例如 { age: { type: Number, min: 0 } } 会在 save() 时校验,但原生驱动不会
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/myapp', {
  maxPoolSize: 10,
  serverSelectionTimeoutMS: 5000,
});

const User = mongoose.model('User', new mongoose.Schema({
  name: String,
  email: { type: String, required: true, unique: true }
}));

// 此处 save() 会触发校验和中间件
new User({ name: 'Alice', email: 'a@example.com' }).save();

浏览器端 JS 不能直接连 MongoDB 的根本原因

MongoDB 协议基于 TCP,不走 HTTP;而浏览器只允许发起 fetchXMLHttpRequest 等 HTTP(S) 请求,且受同源策略和 CORS 限制。即使强行用 WebSockets 模拟,也会暴露数据库凭证、绕过认证逻辑,属于严重安全漏洞。

  • 正确做法:用 Express/Fastify/NestJS 等框架写一个后端接口,接收前端请求 → 操作 MongoDB → 返回 JSON
  • 切勿在前端代码里硬编码连接字符串、用户密码或 mongodb:// URL
  • Atlas 提供的 “Data API” 是例外,但它本质仍是 HTTPS 接口,底层仍由 MongoDB 官方代理转发,并非“浏览器直连”

真正容易被忽略的是连接生命周期管理:很多人在每次 HTTP 请求中新建 MongoClient 实例又立刻 close(),这会导致连接池反复销毁重建,性能极差;应全局复用单例 client,并在进程退出前优雅关闭。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

181

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

225

2025.12.18

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

452

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

328

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

389

2026.02.10

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

678

2023.08.03

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

3

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.7万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.2万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号