最近在使用nest.js和mongodb数据库一起构建node应用,记录下主要步骤。因为在过程中也遇见了一些问题,简单做个记录。

安装nest.js

安装node

需要注意的是node的版本需要是v16以上,否则在运行nest时会出现node版本不匹配问题。如果不匹配可以使用 nvm或者n工具切换node版本。
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及以上版本
mpngodb版本
如果选择版本过低,在与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)
显示如下结果说明安装成功
服务执行结果

配置开机自启动
  1. 在项目文件的根目录中新建文件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
    修改为自己的实际目录地址

  2. 以管理员权限打开命令控制后台执行命令(命令中路径需换成项目的实际路径)
    启动自启动服务
    同样在浏览器中输入 http://localhost:27017 出现图片字符说明启动成功,以后开机会自启动数据库服务。
    服务执行结果

  3. 启动 MongoDB 命令为:net start MongoDB
    关闭 MongoDB 命令为:net stop MongoDB

nest访问mongodb数据库

  1. 在命令行中输入mongo打开 Mongo shell
    服务执行结果

  2. 继续运行命令完成查看数据库,新增数据库,修改数据库权限用户密码

    show dbs  //查看当前数据库
    use <你的数据库名称> //如果该数据库存在就会切换,如果没有就会新增且切换为当前数据库
    
    db.createUser({
    ...   user: "xxxxxx", //设置账号
    ...   pwd: "xxxxxxx",  //设置密码
    ...   roles: [
    ...     { role: "readWrite", db: <数据库名称>},
    ...     { role: "dbAdmin", db: <数据库名称>},
    ...   ]
    ... })  //为数据库设置用户密码
    
    db.changeUserPassword(<账号>, "newPassword") //修改密码
    

    以上我们就在mongodb中新增了一个数据库,于是我们可以在nest中关联到mongodb数据库,并在nest声明表以及逻辑。

  3. 在nest中安装mongodb服务

    npm install --save @nestjs/mongoose mongoose
    
  4. 在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 {}
    
    //注意数据库名称密码尽量不要使用 @ 字符。可能会导致格式问题
    
  5. 启动nest服务
    在nest中建表并声明表字段(相关代码省略),然后运行node服务
    服务执行结果
    如图为执行成功,然后使用postman进行接口测试。
    服务执行结果
    接口成功返回了我们新增的数据,然后我们可以使用mongo可视化工具(robo 3t 或者 Studio 3t)查看我们新增数据是否落表成功。
    服务执行结果
    数据落表成功。

结束