nest与mongodb构建node服务端应用
最近在使用nest.js和mongodb数据库一起构建node应用,记录下主要步骤。因为在过程中也遇见了一些问题,简单做个记录。
安装nest.js
安装node
需要注意的是node的版本需要是v16以上,否则在运行nest时会出现node版本不匹配问题。如果不匹配可以使用 nvm或者n工具切换node版本。
安装nest.js
使用npm包形式安装nest脚手架。
$ npm i -g @nestjs/cli
$ nest new project-name
project-name为你创建的项目名
官网还提供了其他的安装方式 NestJs中文官网链接
安装Mongodb服务
前往mongodb官网下载对应的mongo版本
Mongodb官网,选择产品(Products)->社区版本(Community Server),企业版要钱社区版免费。
选择mongodb服务版本
最好选择v5及以上版本
如果选择版本过低,在与nest链接时,可能会出现版本不匹配提示信息
以下是GPT提供的一些分析以及解决办法
‘
这个错误提示表示 MongoDB 驱动程序需要与 MongoDB 服务器上的最低 “wire version” 版本匹配。 “wire version” 是 MongoDB 驱动程序和服务器之间通信所使用的协议版本。错误消息表明您的 MongoDB 驱动程序版本需要至少为 6,但是您的 MongoDB 服务器上的 “wire version” 为 4,这会导致不兼容问题。
为了解决这个问题,您需要升级 MongoDB 驱动程序(Node.js 驱动程序)版本或降低 MongoDB 服务器版本,以便它们之间的 “wire version” 匹配。以下是一些可能的解决方案:
·升级 MongoDB 驱动程序:
您可以尝试升级 MongoDB Node.js 驱动程序(mongodb 包)的版本到符合 MongoDB 服务器的要求。在您的项目中使用最新的 MongoDB Node.js 驱动程序版本可能会解决兼容性问题。
·降低 MongoDB 服务器版本:
如果您无法升级 MongoDB Node.js 驱动程序,您可以尝试将 MongoDB 服务器版本降级到与驱动程序版本兼容的版本。这可能需要升级或降级 MongoDB 服务器实例,具体取决于您的需求和部署环境。
·查看 MongoDB 服务器兼容性:
检查您的 MongoDB 服务器版本是否支持所使用的 MongoDB Node.js 驱动程序版本。确保两者之间的 “wire version” 兼容。
‘
所以我选择了升高mongodb服务的版本
如果使用的是v6以上版本,我在实际安装中发现安装包的bin文件夹下缺少mongo.exe文件,在后续使用 mongo Shell时会报错
“‘mongo’ 不是内部或外部命令,也不是可运行的程序或批处理文件。”
出现这个问题时可以先检查环境变量是否配置有问题。后来发现是安装包bin文件下缺少执行文件,后来简单方法就是调整版本至v5。
安装数据包服务
点击下载的msi包,依次安装就行。安装完毕后在bin文件同级目录下创建data文件,并在data文件下新建db和log文件(log没有的话需要创建),分别存放数据库表和打印的日志信息。
配置环境变量
搜索高级系统设置->点击高级->点击环境变量->找到系统变量->点击Path并点击编辑->点击新建并将bin文件的路径复制进去->依次点击确认就完成系统变量的配置
启动mongodb
进入命令编辑模式 win+r或者在搜索中输入cmd进入命令行模式,进入mongodb包中新建的db文件夹,运行
mongod --dbpath D:\Mongodb\Server\data\db <后面为db文件夹目录>
执行完毕后在浏览器输入:localhost:27017 (服务端口一般为27017)
显示如下结果说明安装成功
配置开机自启动
在项目文件的根目录中新建文件mongo.config,并输入
#数据库数据存放目录 dbpath=D:\mongodb\data\db #数据库日志存放目录 logpath=D:\mongodb\log\mongod.log #以追加的方式记录日志 logappend = true #端口号 默认为 27017 port=27017 #开启用户认证 auth=false #mongodb所绑定的ip地址,绑定后只能通过127访问 bind_ip = 0.0.0.0 #启用日志,默认启用 journal=true #过滤掉一些无用的日志信息,若需要调试使用请设置为false quiet=true #不允许全表扫描 notablescan=false
dbpath=D:\mongodb\data\db
logpath=D:\mongodb\log\mongod.log
修改为自己的实际目录地址以管理员权限打开命令控制后台执行命令(命令中路径需换成项目的实际路径)
同样在浏览器中输入 http://localhost:27017 出现图片字符说明启动成功,以后开机会自启动数据库服务。
启动 MongoDB 命令为:net start MongoDB
关闭 MongoDB 命令为:net stop MongoDB
nest访问mongodb数据库
在命令行中输入mongo打开 Mongo shell
继续运行命令完成查看数据库,新增数据库,修改数据库权限用户密码
show dbs //查看当前数据库 use <你的数据库名称> //如果该数据库存在就会切换,如果没有就会新增且切换为当前数据库 db.createUser({ ... user: "xxxxxx", //设置账号 ... pwd: "xxxxxxx", //设置密码 ... roles: [ ... { role: "readWrite", db: <数据库名称>}, ... { role: "dbAdmin", db: <数据库名称>}, ... ] ... }) //为数据库设置用户密码 db.changeUserPassword(<账号>, "newPassword") //修改密码
以上我们就在mongodb中新增了一个数据库,于是我们可以在nest中关联到mongodb数据库,并在nest声明表以及逻辑。
在nest中安装mongodb服务
npm install --save @nestjs/mongoose mongoose
在nest的入口出关联你的数据库地址,以创建一个User数据库为例
app.module.ts import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { UserModule } from './mongodb/user/user.module'; @Module({ imports: [ MongooseModule.forRoot('mongodb://<数据库账号>:<数据库密码>@localhost:27017/<数据库名称>'), UserModule, ], }) export class AppModule {} //注意数据库名称密码尽量不要使用 @ 字符。可能会导致格式问题
启动nest服务
在nest中建表并声明表字段(相关代码省略),然后运行node服务
如图为执行成功,然后使用postman进行接口测试。
接口成功返回了我们新增的数据,然后我们可以使用mongo可视化工具(robo 3t 或者 Studio 3t)查看我们新增数据是否落表成功。
数据落表成功。