使用 Node.js 和 MongoDB 的后端

概述

Express 和 Node 构成中间(应用程序)层。 Express.js 是一个服务器端 Web 框架,而 Node.js 是流行且强大的 JavaScript 服务器平台。

[Mern 架构](https://res.cloudinary.com/practicaldev/image/fetch/s--v5djXdcg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/pjmlkrbahbklhl90ve44.png)

Express.js 和 Node.js 服务器层

Express.js 将自己标榜为“用于 Node.js 的快速、不拘一格、极简主义的 Web 框架”,而这正是它的本质。 Express.js 具有强大的 URL 路由模型(将传入的 URL 与服务器函数匹配),以及处理 HTTP 请求和响应。

通过从 React.js 前端发出 XML HTTP 请求 (XHR) 或 GET 或 POST,您可以连接到为您的应用程序提供支持的 Express.js 函数。这些函数反过来使用 MongoDB 的 Node.js 驱动程序,或者通过使用 Promises 的回调来访问和更新 MongoDB 数据库中的数据。


概述

[结构](https://res.cloudinary.com/practicaldev/image/fetch/s--AIO8A3-K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/qy8lwrfj44xx0y816j6c.png)

  • 通过 Express 路由,匹配路由的 HTTP 请求将由 CORS 中间件在到达安全层之前进行检查。

  • 安全层包括:

1、JWT认证中间件:验证SignUp、验证token

2.授权中间件:根据MongoDB数据库中的记录检查用户的角色

  1. 当中间件抛出任何错误时,将向客户端发送一个错误消息作为 HTTP 响应
  • Controllers 通过 Mongoose 库与 MongoDB 数据库交互并向客户端发送 HTTP 响应。

包裹

  • 快递

  • bcryptjs

  • jsonwebtoken

  • 猫鼬

  • MongoDB


项目

首先创建一个我们之前创建的“后端”文件夹并创建服务器。然后,我们将使用 npm init 初始化 package.json。

 mkdir backend
 cd backend
 npm init- y

进入全屏模式 退出全屏模式

项目结构

使用 npm 或 yarn 安装所需的包。由于我使用的是 Typescript,因此类型被安装为开发依赖项。 package.json 应该如下所示。

packages
"dependencies": {
    "bcryptjs": "^2.4.3",
    "body-parser": "^1.19.2",
    "cookie-parser": "^1.4.6",
    "cors": "^2.8.5",
    "dotenv": "^16.0.0",
    "express": "^4.17.3",
    "express-jwt": "^6.1.1",
    "jsonwebtoken": "^8.5.1",
    "mongodb": "^4.4.1",
    "mongoose": "^6.2.4",
    "morgan": "^1.10.0"
  },
  "devDependencies": {
    "@types/bcryptjs": "^2.4.2",
    "@types/cookie-parser": "^1.4.2",
    "@types/cors": "^2.8.12",
    "@types/express": "^4.17.13",
    "@types/express-jwt": "^6.0.4",
    "@types/jsonwebtoken": "^8.5.8",
    "@types/mongoose": "^5.11.97",
    "@types/morgan": "^1.9.3",
    "@types/node": "^17.0.21",
    "nodemon": "^2.0.15",
    "ts-node": "^10.6.0",
    "typescript": "^4.6.2"
  }

进入全屏模式 退出全屏模式

  1. 文件夹 创建以下文件夹
mkdir controllers routes middleware utils models config
touch server.ts config.env

进入全屏模式 退出全屏模式

控制器

auth.js:处理注册和登录操作

user.ts:返回公共和受保护的内容

routes

auth.ts: POST 注册和登录

user.ts:获取公共和受保护的资源

中间件

auth.ts:身份验证中间件,检查受保护的路由

error.ts:错误处理中间件

models 用于猫鼬模型

user.ts:数据库中的用户模式和模型

配置

配置MongoDB数据库连接

配置认证密钥

server.ts:

导入和初始化必要的模块和路由,监听连接。

config.env:

存储环境变量


后端/server.ts

在这里,我们要求使用 express 和 cors。 const port process.env.port 将从我们需要的 config.env 访问端口变量。

require('dotenv').config({path:'./config.env'});

import express from "express";
import cors from "cors";
import cookieParser from 'cookie-parser';
import morgan from 'morgan';
import {json} from 'body-parser'
import mongoose from 'mongoose'
import { connectDB } from "./config/db";



const app= express();
const PORT= process.env.PORT || 5000;
const errorHandler = require('./middleware/error')

//connect to db
connectDB()

app.use(express.json());
app.use("/api/auth", require("./routes/auth"));
app.use("/api/private", require("./routes/private"));

//ErrorHandler (Should be last piece of middleware)
app.use(errorHandler);

const server=app.listen(
    PORT,()=>{
        console.log(`Server is running on port ${PORT}`)
    }
)
process.on("unhandledRejection",(error,promise)=>{
    console.log(`Logged Error: ${error}`);
    server.close(()=>process.exit(1))

})

进入全屏模式 退出全屏模式


后端/config.env

PORT=5000
MONGO_URI=mongodb://localhost:27017/<your db name>
JWT_SECRET=<JWT secret key>
JWT_EXPIRE=10min
EMAIL_HOST=<Email config>
EMAIL_PORT= <Email config>
EMAIL_USER=<Email config>
EMAIL_PASS=<Email config>
EMAIL_FROM=<Email config>

进入全屏模式 退出全屏模式


后端/config/db.ts

在这里我们可以添加以下代码来连接我们的数据库。为此,您应该安装 mongodb 并启动 Mongodb 服务。

该函数用于backend/server.ts中连接Mongodb

import { ConnectOptions } from 'mongodb';
import mongoose from 'mongoose';
const connectDB = async ()=> {
    await mongoose.connect(process.env.MONGO_URI!);
    console.log('MongoDb Connected');   
}
module.exports=connectDB;

进入全屏模式 退出全屏模式

到目前为止,我们有一个可以连接到 Mongodb 的基本服务器。在本系列的第 3 部分中,我们将研究服务器 API 端点和错误处理

Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐