开发nodejs RESETful api 创建项目流程

news/2024/11/16 21:56:44/文章来源:https://www.cnblogs.com/yaxi-blog/p/18415398

开发nodejs RESETful api 创建项目流程

1. 安装 vm-windows、node.js 和 npm

安装 Node.js 时, 建议使用版本管理器,因为版本变更速度非常快。 你可能需要根据所使用的不同项目的需要在多个 Node.js 版本之间进行切换。 Node 版本管理器(通常称为 nvm)是安装多个版本的 Node.js 的最常见方法,但仅适用于 Mac/Linux,在 Windows 上不受支持。 相反,我们建n议安装 nvm-windows,然后使用它来安装 Node.js 和 Node Package Manager (npm)

请注意:

重要

在安装版本管理器之前,始终建议从操作系统中删除 Node.js 或 npm 的任何现有安装,因为不同的安装类型可能会导致出现奇怪和混淆的冲突。 这包括删除可能保留的任何现有的 Node.js 安装目录(例如,“C:\Program Files\nodejs”)。 NVM 生成的符号链接不会覆盖现有的(甚至是空的)安装目录。 有关删除先前安装的帮助,请参阅如何从 Windows 中完全删除 node.js

  1. 请遵循 windows-nvm 存储库上的安装说明。 建议使用安装程序,但如果对需求有更深入的了解,可能需要考虑手动安装。 安装程序将指向最新版本发布页面

  2. 下载最新版本的 nvm-setup.zip 文件。

  3. 下载完成后,打开 zip 文件,然后打开 nvm-setup.exe 文件

  4. Setup-NVM-for-Windows 安装向导将引导你完成安装步骤,包括选择将在其中安装 nvm-windows 和 Node.js 的目录)

    图片

  5. 安装完成后。 打开 PowerShell(建议使用提升的管理员权限打开),尝试使用 windows-nvm 来列出当前安装的 Node 版本(此时应为无):nvm ls

    图片

  6. 安装 Node.js 的当前版本(用于测试最新的功能改进,但比 LTS 版本更容易出现问题):nvm install latest

  7. 要安装 Node.js 的最新稳定 LTS 版本(建议),首先通过 nvm list available 查找当前的 LTS 版本号,然后使用 nvm install <version> 安装 LTS 版本号(将 <version> 替换为版本号 nvm install 12.14.0))

    图片

  8. 出安装的 Node 版本:nvm ls。现在应会看到刚安装的两个版本
    ![图片]:(简单图床-EasyImage

  9. 在安装所需的 Node.js 版本后,通过输入 nvm use <version>(请将 <version> 替换为版本号,即 nvm use 12.9.0)来选择要使用的版本。

2. 使用 Express 创建Nodejs Web RESETful api 应用

Express 是简约、灵活、流畅的 Node.js 框架,可便于更轻松地开发 Web 应用,以处理 GET、PUT、POST 和 DELETE 等多种类型的请求。 Express 随附一个应用生成器,可用于自动创建应用的文件体系结构。

  1. 打开命令行(命令提示符、Powershell 或你喜欢的任何工具)。

  2. 创建新项目文件夹 mkdir ExpressProjects 并输入以下目录:cd ExpressProjects

  3. 使用 npm install -g express-generator 命令全局安装express-generator脚手架

  4. 创建项目:

    # 创建项目
    express --no-view demo-api
    # 进入项目目录
    cd demo-api 
    # 安装依赖包
    npm i
    # 启动项目
    npm start 
    

    我们使用了--no-view参数,它的意思是不需要任何视图模板,因为我们这个项目专门做后端接口的

    1. 你现在可以打开 Web 浏览器并转到localhost:3000来查看这个正在运行的应用
      图片

3. nodemon 监听修改

当我们修改代码后,你不重启服务,它根本就不会生效就需要安装nodemon来实现热更新

npm i nodemon

然后打开项目根目录下的package.json,将start这里修改为

"scripts": {"start": "nodemon ./bin/www"
}

改完后,我们再次启动服务

npm start

当我们再次修改项目后 无需重启 修改后的api 可以直接生效

4.使用Docker安装数据库MySql

  1. 安装Docker
    进入Docker官网后,Get Started | Docker,直接下载安装。window需要进入进入控制面板,找到启动或关闭 Windows 功能,确认Hyper-v适用于 Linux 的 Windows 子系统勾选上了
    图片
    如果还是不能启动,还有可能是Linux 子系统版本太老了。可以打开PowerShell,运行命令更新
    wsl --update
    完成后重启电脑 在其启动Docker

  2. 使用 docker compose 安装mysql
    在你的项目目录中创建一个名为 docker-compose.yml 的文件。这个文件将定义你的服务、网络和卷。

    services:mysql:image: mysql:8.3.0command:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_cienvironment:- MYSQL_ROOT_PASSWORD=colin1234- MYSQL_LOWER_CASE_TABLE_NAMES=0ports:- "3306:3306"volumes:- ./data/mysql:/var/lib/mysql  
    

导航到包含 docker-compose.yml 文件的目录,然后运行以下命令

  docker-compose up -d  

这样,MySQL就会自动下载好,并启动起来了

5. 创建数据库

我们先来创建数据库。打开客户端软件,并连接上去。选择,新增数据库

设置数据库名字为demo_api_development

字符集,也就是编码的选择,这里默认使用了utf8mb4``utf8是一种能非常好的支持世界各国语言的编码。后面的mb4可以让数据库正确的存储emoji表情符号,所以我们就用这个

排序规则,意思是,对文本数据进行比较和排序时,该如何处理顺序和规则。这里选择utf8mb4_general_ci,它的意思是:不区分大小写,不区分重音符号。

点击确定数据库创建完成

6. 使用 Sequelize ORM

Sequelize 中文文档是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能

ORM对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,在数据库和编程语言之间建立一种映射关系。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

  1. 安装sequelize的命令行工具
npm i -g sequelize-cli
  1. 安装当前项目所依赖的sequelize包和对数据库支持依赖的mysql2
npm i sequelize mysql2

3. 在项目根目录中初始化

sequelize init

初始化完成后项目中会生成sequelize所需的目录和文件
微信截图_20240915151534

.
├── config
│   └── config.json
├── migrations
├── models
│   └── index.js
└── seeders

在编辑器中,也可以看到项目中新增了这些东西,现在一一看看,它们是用来干嘛的

  • config:这里放的也就是sequelize所需要的连接数据库的配置文件。

  • migrations:是迁移的意思,如果你需要对数据库做新增表、修改字段、删除表等等操作,就需要在这里添加迁移文件了。而不是像以前那样,使用客户端软件来直接操作数据库

  • models:模型文件,当我们使用sequelize来执行增删改查时,直接对模型进行操作每个模型都对应数据库中的一张表

  • seeders,是存放的种子文件。需要添加测试数据到数据表时。用命令行执行种子文件数据表中会自动填充进一些用来测试内容

7. sequelize连接数据库、模型、迁移、种子

  1. 数据库连接配置,首先打开项目目录下的config/config.json文件,这里是连接数据库的配置,当我们配置好这个文件之后Node项目就会自动连接到数据库
{"development": {"username": "root","password": null,"database": "database_development","host": "127.0.0.1","dialect": "mysql"},"test": {"username": "root","password": null,"database": "database_test","host": "127.0.0.1","dialect": "mysql"},"production": {"username": "root","password": null,"database": "database_production","host": "127.0.0.1","dialect": "mysql"}
}
  1. 生成模型和迁移文件

通过sequelize命令来生成模型,每个模型都对应一个数据库中的数据表, 在代码中对模型进行操作及操作数据库

sequelize model:generate --name User --attributes username:string,password:string

打开models/user.js。可以看到,在模型文件夹中,出现了一个叫做User的模型,它里面有username和password类型都是字符串,根据上面的命令生成。

// models/user.js
'use strict';
const {Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {class User extends Model {/*** Helper method for defining associations.* This method is not a part of Sequelize lifecycle.* The `models/index` file will call this method automatically.*/static associate(models) {// define association here}}User.init({username: DataTypes.STRING,password: DataTypes.STRING}, {sequelize,modelName: 'User',});return User;
};

打开migrations文件夹,里面出现了一个由当前时间,加上create-user命名的文件,这个就是User模型对应的迁移文件

// migrations/20240915073618-create-user.js文件
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {async up(queryInterface, Sequelize) {await queryInterface.createTable('Users', {id: {allowNull: false,autoIncrement: true,primaryKey: true,type: Sequelize.INTEGER},username: {type: Sequelize.STRING},password: {type: Sequelize.STRING},createdAt: {allowNull: false,type: Sequelize.DATE},updatedAt: {allowNull: false,type: Sequelize.DATE}});},async down(queryInterface, Sequelize) {await queryInterface.dropTable('Users');}
};

它的作用就是用来创建、修改表的,在up部分。我们通过createTabel创建了一个叫做Users的表

注意,我们执行生成模型的命令中,模型名字是单数:User表的名字一定是复数形式,也就是Users这是sequelize的命名规则,不能搞错。

可以看到Users表里面的字段有,比方说idusernamepasswordcreateAtupdataAt,其中字段createdAtupdatedAtsequelize帮我们自动添加的

我们在username和password中添加约束,让用户名和密码不能为空

      username: {allowNull: false,type: Sequelize.STRING.},password: {allowNull: false,type: Sequelize.STRING},

down部分,里面写的是dropTable,也就是删除当前的表。当我们创建表,建完后发现有错误,也可以通过相关命令来删除当前表。

  1. 运行迁移
sequelize db:migrate

当我们运行上面的迁移命令时,sequelize 就会根据上面的迁移文件自动在数据库中创建对应的Users表,

QQ20240915-160952

SequelizeMeta是我们运行迁移命令时,自动生成的。这张表里记录已经运行迁移的记录,当你再次运行sequelize db:migrate时,已经运行过的迁移文件,就不会重复再次执行了

如果当我们运行迁移后发现Users表的字段设置不正确可以通过命令sequelize db:migrate:undo命令撤销最近的一次迁移

  1. 种子文件

有了数据表之后,下一步要填充一些在开发中用来测试的数据,我希望数据库里有 100 条用户数据,这时候就要用到种子文件,运行命令:

sequelize seed:generate --name user

我们的项目目录下seeders文件夹中就会生成一个xxx-user.js的种子文件


'use strict';/** @type {import('sequelize-cli').Migration} */
module.exports = {async up (queryInterface, Sequelize) {/*** Add seed commands here.** Example:* await queryInterface.bulkInsert('People', [{*   name: 'John Doe',*   isBetaMember: false* }], {});*/},async down (queryInterface, Sequelize) {/*** Add commands to revert seed here.** Example:* await queryInterface.bulkDelete('People', null, {});*/}
};

其中up部分就是生成表数据使用的函数,down部分就是删除表数据的函数,我们稍加修改

'use strict';/** @type {import('sequelize-cli').Migration} */
module.exports = {async up(queryInterface, Sequelize) {const users = [];const counts = 100;for (let i = 1; i <= counts; i++) {const user = {username: `admin${i}`,password: `123456`,createdAt: new Date(),updatedAt: new Date(),};users.push(user);}await queryInterface.bulkInsert('Users', users, {});},async down(queryInterface, Sequelize) {await queryInterface.bulkDelete('Users', null, {});}
};

修改完成后我们运行命令,其中xxx-user为种子文件名

sequelize db:seed --seed xxx-user

运行完成后,我们在数据库客户端中刷新一下,我们的100条用户数据已经被通过上面的种子文件插入到数据库中了:

微信截图_20240915162538

8.到此项目搭建大功告成了

至此我们可以使用搭建好的项目,开发接口了

在路由routers/users.js文件中修改代码

var express = require('express');
var router = express.Router();
//导入上面sequelize生成的模型
const { User } = require("../models")
/* GET users listing. */
router.get('/', async function (req, res, next) {// 使用模型 查找所有User,返回刚才用种子文件生成的100条用户数据const users = await User.findAll()res.json({success: true,data: {userlist: users //接口返回100条用户数据}});
});module.exports = router;

在项目目录中npm start启动项目,在浏览器中输入users路由对应的路径请求接口试试看,成功返回数据库中的100条user数据

QQ20240915-163844

9. 总结

以上面搭建的项目为基础,当我们要实际开发设计好数据表后,通过命令

# 修改生成模型 的指令为设计好的数据表字段 运行下面命令生成 模型 和 迁移文件
sequelize model:generate --name Order --attributes orderNum:string,product:string# 运行迁移命令 自动创建模型对应的数据表
sequelize db:migrate
# 恢复上一次迁移:回滚
sequelize db:migrate:undo
# 撤销所有迁移
sequelize db:migrate:undo:all# 生成种子文件
sequelize seed:generate --name order
# 修改种子文件up函数、down函数
#使用下面命令 运行种子文件 会将测试数据自动插入数据库
sequelize db:seed --seed xxx-order
# 撤销最近一次运行种子
sequelize db:seed:undo
# 撤销所有运行的种子
sequelize db:seed:undo:all

更多迁移操作中文文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797665.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

帝国cms用的什么数据库

帝国CMS(EmpireCMS,简称ECMS)使用的是MySQL数据库来存储其数据。MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),因其高性能、稳定性和易用性而受到许多Web应用的青睐,包括内容管理系统(CMS)。 帝国CMS利用MySQL数据库来存储网站的各种数据,包括但不限于文章…

软件工程课程第二次个人作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253这个作业的目标 学习开发游戏学号 082200168项目名称:羊了个羊-动物版消除类小游戏 项目链接:https://github.com/luihing2004…

织梦dede如何去掉后台登陆界面广告

要去除DEDECMS(织梦CMS)后台登录界面的广告,可以通过以下步骤来实现: 步骤 1: 删除广告代码定位广告文件:广告通常位于/dede/templets/目录下的login.htm文件中。 另外,还有一个广告文件login_ad.htm,也需要处理。删除广告代码:打开login.htm文件,查找并删除以下代码:…

帝国cms后台出现“您还未登录”错误怎么办

当帝国CMS后台出现“您还未登录”的错误提示时,通常是因为用户的登录状态未能正确维持。这个问题可能由多种因素引起,以下是一些常见的解决方法: 1. 清除浏览器缓存和Cookies清除缓存:打开浏览器的设置或选项菜单,找到清除浏览数据或清除缓存的功能,选择清除所有缓存数据…

帝国cms自动刷新怎么设置

帝国CMS的自动刷新功能可以通过后台设置或使用插件来实现。下面是两种实现自动刷新的方法: 方法一:通过后台设置登录后台:登录帝国CMS的后台管理界面。进入系统设置:在后台管理界面中找到“系统设置”或类似的选项。找到缓存设置:在系统设置中,找到有关页面缓存的设置部分…

帝国CMS二次开发基本问题有哪些

帝国CMS的二次开发涉及到对现有系统的扩展和定制,以满足特定业务需求。在进行二次开发时,开发者可能会遇到一系列的问题。以下是一些常见的帝国CMS二次开发基本问题: 1. 导入语言包 在帝国CMS中,如果需要在扩展文件中导入语言包,可以使用以下方式:如果程序文件位于/e/ext…

帝国CMS提示“您来自的链接不存在”怎么解决?

当帝国CMS提示“您来自的链接不存在”时,这通常意味着系统无法找到或识别你尝试访问的链接。这种情况可能由多种原因造成,以下是一些常见的解决方法: 1. 检查链接地址确认链接地址:首先确认你尝试访问的链接地址是否正确,包括拼写错误或格式问题。 清除缓存:有时候浏览器…

dedecms怎么获取当前文档url地址

在DEDECMS中获取当前文档的URL地址,可以通过多种方法实现。以下是几种常用的方法: 方法一:使用全局函数 DEDECMS提供了一个全局函数GetCurUrl(),可以用来获取当前页面的URL地址。在模板文件中,可以通过{dede:geturl}标签来调用这个函数:{dede:geturl runphp=yes}@me = Ge…

帝国cms和织梦哪个好

帝国CMS和织梦CMS都是基于PHP语言的内容管理系统(CMS),各自具有一定的优势和劣势。选择哪一个更适合你,取决于你的具体需求、技术水平以及对未来的规划。下面是两者的比较,帮助你做出决策: 织梦CMS (DEDECMS) 优点用户友好度:织梦CMS以其简洁的后台界面和易于使用的特性…

Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 Linux

Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 LinuxUbuntu 22.04.5 LTS (Jammy Jellyfish) - 现代化的企业与开源 Linux Ubuntu 22.04.5 发布,配备 Linux 内核 6.8 请访问原文链接:https://sysin.org/blog/ubuntu-2204/,查看最新版。原创作品,转载请保留出处。 作者主…

DEDECMS怎么调用当前文档中TAG标签

在DEDECMS中调用当前文档中的TAG标签,可以通过在模板文件中使用特定的标签来实现。以下是具体的步骤和示例代码: 步骤 1: 打开模板文件 找到你想要显示TAG标签的模板文件,例如文章详情页的模板文件。 步骤 2: 添加调用TAG标签的代码 在模板文件中,使用{dede:field}标签来调…

织梦arclist标签怎么实现分页

在织梦CMS (DEDECMS) 中使用arclist标签实现分页功能,可以通过以下几个步骤来完成: 1. 引入必要的脚本文件 确保你的页面已经引入了织梦CMS提供的Ajax分页所需的JavaScript文件。通常,你需要在页面头部引入dedeajax2.js文件。<script src="{dede:global.cfg_cmsurl/…