【前端必备】使用NodeJs写接口(本地连接MySQL + 连接到云服务MySQL)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【前端必备】使用NodeJs写接口(本地连接MySQL + 连接到云服务MySQL)


包准备

express: 一个流行的Web框架,用于构建Web应用程序和API
1. npm install express
bodyparser: 一个中间件,用于解析请求体中的JSON、URL编码和文本数据
2. npm install body-parser
jsonwebtoken: 一个用于生成和验证JSON Web令牌的库
3. npm install jsonwebtoken
mysql: 一个用于连接和操作MySQL数据库的库
4. npm install mysql

引入包介绍

----------------------------------------------------------------------------------------------
Express: 
  Express是一个基于Node.js的Web应用程序框架,它提供了一组强大的  特性和工具,使得开发Web应用程序变得更加容易和高效。Express包含了许多中间件和路由,可以帮助开发者快速构建Web应用程序。
  以下是Express的一些主要特性:
  1. 路由:Express提供了一种简单的方式来定义路由,使得开发者可以轻松地处理HTTP请求和响应。
  2. 中间件:Express中的中间件是一种函数,它可以在请求和响应之间进行处理。Express提供了许多内置的中间件,例如body-parser、cookie-parser等,也可以自定义中间件来满足特定的需求。
  3. 模板引擎:Express支持多种模板引擎,例如EJS、Handlebars等,使得开发者可以轻松地构建动态的Web页面。
  4. 错误处理:Express提供了一种简单的方式来处理错误,使得开发者可以更好地处理异常情况。
  5. 静态文件服务:Express可以轻松地提供静态文件服务,例如CSS、JavaScript、图片等。
  6. 数据库集成:Express可以与多种数据库进行集成,例如MongoDB、MySQL等。
----------------------------------------------------------------------------------------------
BodyParser:
  body-parser是一个Node.js中间件,用于解析HTTP请求体中的数据。
  在Node.js中,HTTP请求通常包含请求头和请求体两部分,请求头包含请求的元数据,而请求体包含请求的实际数据。
  body-parser中间件可以帮助我们解析请求体中的数据,使得我们可以更方便地处理HTTP请求。
  body-parser支持多种数据格式的解析,包括JSON、urlencoded和multipart/form-data等。
  其中,JSON格式的数据通常用于API接口的请求和响应,urlencoded格式的数据通常用于表单提交,multipart/form-data格式的数据通常用于文件上传。
----------------------------------------------------------------------------------------------
jsonwebtoken:
  jsonwebtoken是一个用于生成和验证JSON Web Tokens(JWT)的Node.js库。JWT是一种用于在网络应用程序之间安全传输信息的开放标准(RFC 7519)。它可以用于身份验证和授权,以及在应用程序之间传递声明。
  jsonwebtoken库提供了以下功能:
  1. 生成JWT:使用jsonwebtoken库可以轻松地生成JWT。您可以指定有效负载(即要传输的数据)和密钥(用于签名JWT)。
  2. 验证JWT:jsonwebtoken库还提供了验证JWT的功能。您可以验证JWT的签名是否有效,并检查有效负载中的声明。
  3. 解码JWT:jsonwebtoken库还提供了解码JWT的功能。这意味着您可以将JWT转换为JavaScript对象,以便更轻松地访问有效负载中的数据。
  使用jsonwebtoken库可以轻松地实现JWT身份验证和授权。它是一个流行的Node.js库,广泛用于构建安全的Web应用程序。
----------------------------------------------------------------------------------------------
MySQL:
  Node.js引入的mysql模块是一个用于连接和操作MySQL数据库的模块。它提供了以下功能:
  1. 连接MySQL数据库:使用mysql模块可以轻松地连接MySQL数据库。您可以指定数据库的主机名、端口号、用户名、密码和数据库名称。
  2. 执行SQL查询:mysql模块提供了执行SQL查询的功能。您可以执行SELECT、INSERT、UPDATE和DELETE等SQL语句,并获取查询结果。
  3. 处理事务:mysql模块还提供了处理事务的功能。您可以使用事务来确保多个SQL查询的原子性。
  4. 防止SQL注入:mysql模块提供了防止SQL注入的功能。它使用参数化查询来防止恶意用户通过输入恶意数据来破坏数据库。
  使用mysql模块可以轻松地连接和操作MySQL数据库。它是一个流行的Node.js模块,广泛用于构建Web应用程序和其他类型的应用程序。
  ----------------------------------------------------------------------------------------------

使用NaviCat连接MySQL并创建表,并连接到MySQL

  1. 新建连接


  2. 新建数据库

简单接口调用

以下是一个简单的接口示例,使用了Express和mysql模块连接MySQL数据库:

注( 在根目录创建一个 server.js 文件,存放以下内容 )
const express = require('express');
const mysql = require('mysql');
const app = express();
// 创建数据库连接
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root', // mysql 用户名
  password: '这里是你的mysql密码', // 密码
  database: 'demo1' // 数据库名称
});
// 连接数据库
connection.connect((err) => {
  if (err) {
    console.error('Error connecting to database: ' + err.stack);
    return;
  }
  console.log('Connected to database as id ' + connection.threadId);
});
// 定义路由
app.get('/api/data', (req, res) => {
  // 查询数据
  connection.query('SELECT * FROM user', (error, results, fields) => {
    if (error) throw error;
    res.json(results);
  });
});
// 启动服务器
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

这个接口会监听3000端口,当请求路径为/api/data时,会查询MySQL数据库中的users表,并返回查询结果。你可以根据自己的需求修改数据库连接信息和查询语句。

这个接口会监听3000端口,当请求路径为/api/data时,会返回一个JSON格式的数据。你可以根据自己的需求修改数据和请求路径。

示例: 登录接口

// 登录接口
app.post("/login", (req, res) => {
  var userName = req.body.userName
  var passWord = req.body.passWord
  if (!userName || !passWord) {
    res.send({
      code: 0,
      msg: "用户名与密码为必传参数...",
    })
    return
  }
  const sqlStr = "select * from user WHERE userName=? AND passWord=?"
  conn.query(sqlStr, [userName, passWord], (err, result) => {
    if (err) throw err
    if (result.length > 0) {
      // 生成token
      var token = jwt.sign(
        {
          identity: result[0].identity,
          userName: result[0].userName,
        },
        "secret",
        { expiresIn: "1h" },
      )
      console.log(token)
      res.send({ code: 0, msg: "登录成功", token: token })
      // 如果没有登录成功,则返回登录失败
    } else {
      // 判断token
      if (req.headers.authorization == undefined || req.headers.authorization == null) {
        if (req.headers.authorization) {
          var token = req.headers.authorization.split(" ")[1] // 获取token
        }
        jwt.verify(token, "secret", (err, decode) => {
          if (err) {
            res.send({ code: 1, msg: "账号或密码错误" })
          }
        })
      }
    }
  })
})

示例: 注册接口

// 注册接口
app.post("/register", (req, res) => {
  var userName = req.body.userName
  var passWord = req.body.passWord
  if (!userName || !passWord) {
    res.send({
      code: 0,
      msg: "用户名与密码为必传参数...",
    })
    return
  }
  if (userName && passWord) {
    const result = `SELECT * FROM user WHERE userName = '${userName}'`
    conn.query(result, [userName], (err, results) => {
      if (err) throw err
      if (results.length >= 1) {
        // 如果有相同用户名 注册失败
        res.send({ code: 0, msg: "注册失败,用户名重复" })
      } else {
        const sqlStr = "insert into user(userName,passWord) values(?,?)"
        conn.query(sqlStr, [userName, passWord], (err, results) => {
          if (err) throw err
          if (results.affectedRows === 1) {
            res.send({ code: 1, msg: "注册成功" })
          } else {
            res.send({ code: 0, msg: "注册失败" })
          }
        })
      }
    })
  }
  console.log("接收", req.body)
})

本地测试接口

  1. 使用 node server.js 启动接口
  2. 写接口, 我这个axios是自己的一个封装文件
    你们可以在网上找一个axios封装好的,然后使用,或者直接使用axios请求

    然后引入接口调用

云服务器安装MySQL

暂不介绍

可使用宝塔面板

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
42 25
|
10天前
|
关系型数据库 MySQL 数据库连接
Unity连接Mysql数据库 增 删 改 查
在 Unity 中连接 MySQL 数据库,需使用 MySQL Connector/NET 作为数据库连接驱动,通过提供服务器地址、端口、用户名和密码等信息建立 TCP/IP 连接。代码示例展示了如何创建连接对象并执行增删改查操作,确保数据交互的实现。测试代码中,通过 `MySqlConnection` 类连接数据库,并使用 `MySqlCommand` 执行 SQL 语句,实现数据的查询、插入、删除和更新功能。
|
25天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
3月前
|
关系型数据库 MySQL 网络安全
DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)
“Access denied for user ''@'ip' (using password: YES)”错误通常与MySQL用户权限配置或网络设置有关。通过检查并正确配置用户名和密码、用户权限、MySQL配置文件及防火墙设置,可以有效解决此问题。希望本文能帮助您成功连接MySQL数据库。
331 4
|
3月前
|
安全 关系型数据库 MySQL
【赵渝强老师】MySQL的连接方式
本文介绍了MySQL数据库服务器启动后的三种连接方式:本地连接、远程连接和安全连接。详细步骤包括使用root用户登录、修改密码、创建新用户、授权及配置SSL等。并附有视频讲解,帮助读者更好地理解和操作。
538 1
|
4月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
404 6
|
4月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
4月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
394 1
|
4月前
|
SQL JavaScript 关系型数据库
Node.js 连接 MySQL
10月更文挑战第9天
60 0
|
4月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
680 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库

热门文章

最新文章

  • 1
    【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 4
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 5
    详解智能编码在前端研发的创新应用
  • 6
    巧用通义灵码,提升前端研发效率
  • 7
    智能编码在前端研发的创新应用
  • 8
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 9
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 10
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡