当前位置:网站首页 > Node.js开发 > 正文

node.js express koa_javascript用什么软件

如何使用 Express.js 和 TypeScript 构建 CRUD API
作者:Racheal Kuranchie
来源:https://medium.com/@rachealkuranchie/how-to-build-a-crud-api-with-express-js-and-typescript-21c7c66e5296


如何使用 Express.js 和 TypeScript 构建 CRUD API

先决条件
  1. Node.js
    在我们开始之前,请确保您的机器上安装了 Node。
  2. MongoDB
    同样,请确保您有一个 MongoDB 实例,无论是来自 MongoDB Atlas 平台,还是来自本地安装。
    • 访问 MongoDB Atlas 平台,注册并创建一个集群,这将生成一个连接字符串,用于本应用程序。点击这里 指导您完成设置您的 mongo atlas 的过程。
    • 本地安装的 MongoDB 应该给您留下像这样的连接字符串:“mongodb://localhost:27020/”。
项目设置

通过创建一个新文件夹或目录来启动项目,使用这个命令一步步进行。

mkdir api # 创建一个文件夹 cd api # 切换到文件夹 npm init -y # 初始化应用程序 

这将创建 package.json 文件,它将是你所有包的中心。

// package.json { 
    "name": "api", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" } 

初始化 package.json 后,接下来是安装本应用程序所需的包。

应用程序的包
  • Express.js (文档)
  • mongoose (文档)
  • mongodb (官网)
  • dotenv (文档)
  • typescript (官网)
  • nodemon (官网)
  • joi (文档)
npm install express dotenv mongoose mongodb joi npm install nodemon --save-dev 

一旦您安装了这些,您将看到 node_modules 和一个 package-lock.json 文件添加到 package.json 文件中。下一步是将 typescript 作为开发依赖项安装,以及为已安装的包安装类型。

npm install typescript ts-node @types/node @types/express --save-dev 

您会注意到与 typescript 相关的依赖项被安装为 devDependencies。这是因为,尽管代码是用 Typescript 编写的,但它将被编译为“普通”的 JavaScript。

现在要在您的应用程序中使用 typescript,您需要初始化它。为此,我们将创建 tsconfig.json 文件,我们可以在其中自定义编译器选项。我们可以通过使用此命令来获取此文件。

npx tsc --init 

tsconfig.json 文件包含许多编译器选项,其中大部分已被注释掉。尽管如此,它可以被定制以适应您的应用程序的特定需求。配置中使用的某些选项非常重要,包括:

  • target: 允许我们指定编译器将输出的目标 JavaScript 版本。
  • module: 指定在 JavaScript 代码中生成的模块代码。CommonJS 被支持,并且是 Node.js 的标准。
  • strict: 启用严格类型检查选项的选项。
  • esModuleInterop: 允许我们将 ES6 模块编译为 CommonJS 模块。
  • skipLibCheck: 如果设置为 true,则跳过默认库声明文件的类型检查。
  • forceConsistentCasingInFileNames: 当设置为 true 时,启用区分大小写的文件命名。

您将必须启用的一个选项称为 outDir,它指定编译步骤后输出将位于何处。注意,这是必要的,因为 typescript 代码需要被编译为普通 JavaScript。您可以在 tsconfig.json 文件的 /Emit / 部分找到此选项并取消注释它。

默认情况下,此选项的值设置为根目录。将其更改为 dist 文件夹:

文件夹结构

是时候创建您的文件夹结构了。我喜欢通过尽可能减少我的代码来实现关注点的分离。这有助于轻松调试,也使您的代码易于阅读和清洁。

创建一个 src 和 dist 文件夹。dist 文件夹将包含所有已编译的代码。在 src 文件夹中,创建这些文件夹:Controllers、Models、Routes、Services、Server 和 Config。在这些文件夹中,分别创建以下文件:post.controller.ts、posts.ts、post.routes.ts、post.service.ts、app.ts 和 db.config.ts。

在根目录中创建一个 .env 文件,并保留您的 mongo DB atlas 数据库用户名和密码。

安装并初始化应用程序中的 typescript 后,下一步是编辑 package.json 文件。将以下内容添加到脚本中:start、dev 和 build。

// package.json { 
    "name": "api", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon ./src/Server/app.ts", "dev": "nodemon ./src/Server/app.ts", "build": "tsc --project tsconfig.json" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { 
    "dotenv": "^16.0.3", "express": "^4.18.2", "joi": "^17.9.1", "mongodb": "^4.13.0", "mongoose": "^6.8.2" }, "devDependencies": { 
    "@types/express": "^4.17.15", "@types/node": "^18.11.18", "nodemon": "^2.0.20", "ts-node": "^10.9.1", "typescript": "^4.9.4" } } 

接下来的阶段是将您的数据库连接到您的应用程序。在 config 文件夹中的 db.config.ts 中,编写此代码。使用 mongoose,我们可以使用 mongoose.connect() 方法连接到我们的数据库并与之通信。

// db.config.ts // 导入模块 import dotenv from 'dotenv' import mongoose from 'mongoose' dotenv.config() // 来自 env 的详细信息 const username = process.env.username const password = process.env.password const dbName = 'Post' // 连接字符串到 mongo atlas const connectionString = `mongodb+srv://${ 
     username}:${ 
     password}@cluster0.tjh8e.mongodb.net/${ 
     dbName}?retryWrites=true&w=majority` const options = { 
    autoIndex: false, // 不构建索引 maxPoolSize: 10, // 维护最多 10 个套接字连接 serverSelectionTimeoutMS: 5000, // 尝试发送操作 5 秒 socketTimeoutMS: 45000, // 45 秒后关闭套接字 family: 4 // 使用 IPv4,跳过尝试 IPv6 }; // 数据库连接 export const db = mongoose.connect(connectionString, options) .then(res => { 
    if (res) { 
    console.log(`Database connection successfully to ${ 
     dbName}`) } }) .catch(err => { 
    console.log(err) }) 
服务器连接

现在我们已经连接了我们的数据库,下一件事是创建我们的服务器,并查看数据库是否真的已经连接。在 express.js 中创建服务器是直接的。您必须导入 express 并将其初始化,通过将其分配给一个变量,然后您可以访问所有 HTTP 方法来使用。为了在请求中传递 JSON 正文,您必须使用 express 方法,如 express.json()。

// app.ts import express from 'express' import { 
    db } from '../Config/db.config' import { 
    router } from '../Routes/posts.routes' const app = express() // 中间件 app.use(express.json()) app.use(express.urlencoded({ 
    extended: true })) // 路由 app.use('/api/v1/posts', router) db.then(() => { 
    // 数据库连接成功后再启动服务器 app.listen(7070, () => console.log('Server is listening on port 7070')) }); 
创建模式和模型

进入模型文件夹中的 posts.ts,并使用以下代码创建您的模式和模型。模式是数据库表的表示,它描述了您数据库中的类型,而模型是一个设计,它决定了应该在模式中包含什么。PostschemaValidate 指定了请求体中所需的字段类型,以便保存。它作为请求的另一层验证。

// posts.ts // 导入模块 import { 
    Schema, model } from 'mongoose' import Joi from 'joi' // 验证模式 export const PostschemaValidate = Joi.object({ 
    title: Joi.string().required(), description: Joi.string().required(), author: Joi.string().required(), published: Joi.boolean().required(), }) // 创建接口 interface IPosts { 
    title: string, description: string, author: string, published: boolean, } // Posts模式 const postSchema = new Schema({ 
    title: { 
    type: String, // ... 其他 schema 选项 }, // ... 其他字段 }) // 创建模型 export const Post = model('Post', postSchema) 
创建服务

创建模型后,下一步是创建服务类,它将包含我们想要执行的所有操作。在服务类中,我们将创建不同的函数,使用 mongoose 查询如 create, find, findById 等来读取、创建、更新和删除帖子。

// post.service.ts // 导入模块 import { 
    Post } from '../Models/posts' export class postService { 
    // 创建帖子 async createPost(data: any) { 
    try { 
    const newPost = await Post.create(data) return newPost } catch (error) { 
    // 处理错误 } } // 其他 CRUD 操作的函数... } // 导出类 export const postServices = new postService() 
创建控制器

现在,在控制器中,我们将调用服务中的每个函数并执行它。为了使我们的代码易于阅读和清洁,我们尽量保持每个文件尽可能简单,并且每个函数在应用程序中只有一个责任。代码也很容易维护和扩展,因为我们已经分离了关注点,所以我们可以专注于每个功能。

// post.controller.ts // 导入模块 import { 
    postServices } from '../Services/post.service' import { 
    Request, Response } from 'express' import { 
    PostschemaValidate } from '../Models/posts' class postController { 
    // 添加帖子控制器 addpost = async (req: Request, res: Response) => { 
    // 要保存在数据库中的数据 const data = { 
    title: req.body.title, author: req.body.author, description: req.body.description, published: req.body.published, } // 验证请求 const { 
    error, value } = PostschemaValidate.validate(data) if (error) { 
    // 处理验证错误 return res.status(400).send({ 
    message: 'Validation error', error }) } const post = await postServices.createPost(value) res.send(post) } // 其他 CRUD 控制器的方法... } // 导出类 export const PostController = new postController() 
创建路由

路由是我们将使用 HTTP(POST, GET, PUT, DELETE)等方法在控制器中执行操作的地方。我们将根据每个函数创建我们的端点。

// post.routes.ts // 导入模块 import express from 'express' import { 
    PostController } from '../Controllers/post.controller' // 初始化路由器 export const router = express.Router() // 添加帖子路由 router.post('/', PostController.addpost) // 获取帖子 router.get('/', PostController.getPosts) // 获取单个帖子 router.get('/:id', PostController.getAPost) // 更新帖子 router.put('/:id', PostController.updatePost) // 删除帖子 router.delete('/:id', PostController.deletePost) 
测试

在 Postman 或 REST 客户端上测试您的端点。

curl -X POST --data '{ "title": "My Post", "description": "my post description", "author": "aichaoxy", "published": false }' http://localhost:7070/api/v1/posts curl -X GET http://localhost:7070/api/v1/posts curl -X PUT --data '{ "title": "My Javascript Post" }' http://localhost:7070/api/v1/posts/6421b0e73169ceabf11644e9 curl -X DELETE http://localhost:7070/api/v1/posts/6421b0e73169ceabf11644e9 

最后,在 mongo atlas 中检查您的 mongo 数据库中的数据。

结论

您已经创建了一个用于创建、读取、更新和从数据库中删除数据的 API。您可以查看我之前关于 认证和授权 的帖子。


这篇文章提供了一个完整的教程,从项目设置到测试,展示了如何使用 Express.js 和 TypeScript 创建一个 CRUD API。它包括了设置环境、安装依赖项、创建数据库连接、定义模式和模型、编写服务和控制器逻辑,以及设置路由。最后,作者还提供了如何测试 API 端点的示例。

到此这篇node.js express koa_javascript用什么软件的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 如何建立一个js开发环境_javascript环境配置2024-11-21 12:18:05
  • js 开发环境_javascript编程软件2024-11-21 12:18:05
  • 用js开发游戏_Java开发游戏2024-11-21 12:18:05
  • 从零js开发简易游戏引擎_javascript小游戏代码2024-11-21 12:18:05
  • js做游戏开发_javascript编程软件2024-11-21 12:18:05
  • npm安装axios_nodejs请求第三方api2024-11-21 12:18:05
  • nodejs typescript_深入理解typescript2024-11-21 12:18:05
  • nodejs typescript_typescript有必要学吗2024-11-21 12:18:05
  • 前端异步请求_nodejs请求第三方api2024-11-21 12:18:05
  • nodejs typescript_javascript权威指南2024-11-21 12:18:05
  • 全屏图片