后端:Nodejs、Mongodb、Express Typescript
使用 Node.js 和 MongoDB 的后端 概述 Express 和 Node 构成中间(应用程序)层。 Express.js 是一个服务器端 Web 框架,而 Node.js 是流行且强大的 JavaScript 服务器平台。 [](https://res.cloudinary.com/practicaldev/image/fetch/s--v5djXdcg--/c_limit%2Cf_a
使用 Node.js 和 MongoDB 的后端
概述
Express 和 Node 构成中间(应用程序)层。 Express.js 是一个服务器端 Web 框架,而 Node.js 是流行且强大的 JavaScript 服务器平台。
[](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数据库中的记录检查用户的角色
- 当中间件抛出任何错误时,将向客户端发送一个错误消息作为 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"
}
进入全屏模式 退出全屏模式
- 文件夹 创建以下文件夹
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 端点和错误处理
更多推荐
所有评论(0)