express+nodejs+mysql 开启服务端开发之路

简介: 作为一个普普通通的前端开发,一直有一个“全沾”开发的梦想。如果要开发服务端,现在去学习Java、Go的话,或多或少都会显得有点麻烦了。其实,对于习惯了使用JavaScript的前端er来说,Nodejs就是一个很不错的选择。

作为一个普普通通的前端开发,一直有一个“全沾”开发的梦想。如果要开发服务端,现在去学习Java、Go的话,或多或少都会显得有点麻烦了。其实,对于习惯了使用JavaScript的前端er来说,Nodejs就是一个很不错的选择。

Nodejs是基于Chrome V8引擎的JavaScript运行环境,可以让js代码运行在服务端。光有运行环境还不行,我们还需要使用一个基于Nodejs平台的express开发框架。接下来就从零开始,详细的介绍如何开启一个服务端项目。

安装依赖

想要js代码能运行在服务端,就需要使用nodejs,首先确认本机的nodejs环境:

node -v
// v16.14.0
npm -v
// 8.3.1

如果本机环境上没有nodejs,则需要去官网下载安装包,在安装后将其添加到系统环境变量中。然后我们就可以新建一个项目了:

mkdir express-mysql-demo
cd express-mysql-demo
npm init

想要实现服务端,我们需要以下依赖:

  • express:基于Nodejs的Web开发框架
  • cors:用于解决跨域问题
  • body-parser:用于解析请求头、请求体
  • mysql:连接MySQL数据库

直接安装依赖:

npm i express cors body-parser mysql

在这里需要注意,我们在项目中引入了mysql依赖,只是用来连接数据库,还需要在本地安装MySQL:

  • 首先去官网下载安装包,本项目使用的是5.7.38社区版,下载完成后按照默认安装即可
  • 然后下载一个Navicat,同样去官网下载,下载完成后按照默认安装即可。注意Navicat是要收费的,可以试用14天
  • 测试一下使用Navicat是否可以连接MySQL

服务端

准备好相关环境依赖后,我们就可以开始码代码了:

const express = require('express'); // require配合module.exports使用,属于CommonJS规范
const app = express(); // 创建实例

const cors = require('cors');
app.use(cors()); // 解决跨域问题

const bodyParser = require('body-parser');
// 请求体解析
// 解析JSON格式
app.use(bodyParser.json());
// 解析文本格式,extended:false,表示使用系统模块querystring来处理,默认选择
app.use(bodyParser.urlencoded({extended: false}))

const port = 9099; // 监听端口,注意不能被占用或者使用已经占用的端口
const mysql = require('mysql'); // 数据库连接依赖

const db = mysql.createConnection({
  host: 'localhost', // 本地调试可指定为localhost,生产上需指定数据库地址
  user: '', // 登录数据库用户名
  password: '', // 登录数据库密码
  database: 'db_test', // 选择的数据库名称
  port: 3306, // 数据库端口,默认为3306
})

db.connect((err) => {
  if (err) throw err; // 连接失败就抛出异常
  console.log('数据库连接成功!');
})
// get请求
app.get('/getExamples', (req, res) => {
  const sql = `select * from t_test where type_name='${req.query.type}'`;
  db.query(sql, (err, result) => {
    if (err) {
      console.log('查询失败', err);
    } else {
      const data = JSON.parse(JSON.stringify(result)); // 简单深拷贝
      // 使用JSON格式返回数据
      res.json({
        status: 200,
        data
      })
    }
  })
})
// post请求
app.post('/setExamples', (req, res) => {
  const sql = `insert into t_test(type_name) value(?)`; // sql语句中不能含有mysql关键词
  db.query(sql, [req.body.type], (err, result) => {
    if (err) {
      console.log('添加失败', err);
    } else {
      const data = JSON.parse(JSON.stringify(result));
      // 使用JSON格式返回数据
      res.json({
        status: 200,
        data: data.affectedRows == 1 ? '添加成功' : '添加失败' // affectedRows表示影响的行数
      })
    }
  })
})
app.listen(port, () => {
  console.log(`服务端启动并监听端口${port}`);
})

如上,我们实现了一个简单的服务端,我们可以直接node index.js,也可以使用npm run server命令,这就需要修改一下package.json:

...
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "server": "chcp 65001 && node ./index.js"
},

chcp 65001用于解决控制台中文乱码问题。

把服务端跑起来:npm run server

image-20220628154202252.png

客户端

验证服务端可以使用PostMan等工具,这里我们就直接新建一个index.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <style>
    body {
      text-align: center;
    }
  </style>
  <title>Document</title>
</head>
<body>
  <button id="btn1">查询数据</button>
  <button id="btn2">添加数据</button>
  <script>
    document.getElementById('btn1').addEventListener('click', (e) => {
      axios({
        url: 'http://localhost:9099/getExamples', // 完整的请求地址
        method: 'get', // 请求方法
        params: {
          type: 'type1', // query参数
        },
        transformRequest: [
          function(data) {
            return JSON.stringify(data)
          }
        ],
        // 请求头
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
        },
        dataType: 'json', // 返回数据格式
      }).then((res) => {
        console.log('返回数据', res);
      }).catch(err => {
        console.log('请求失败', err);
      })
    })
    document.getElementById('btn2').addEventListener('click', (e) => {
      axios({
        url: 'http://localhost:9099/setExamples', // 完整的请求地址
        method: 'post', // 请求方法
        data: {
          type: 'type2'
        },
        dataType: 'json', // 返回数据格式
      }).then((res) => {
        console.log('返回数据', res);
      }).catch(err => {
        console.log('请求失败', err);
      })
    })
  </script>
</body>
</html>

内容也不复杂,就是两个按钮,分别查询和新增数据。在这里我们使用了axios来发起HTTP请求,也可以使用fetch、XMLHttpRequest来实现。

运行结果:

image-20220628154501761.png

image-20220628154522570.png

可以发现,数据查询和新增功能都是ok的。

总结

本文介绍了如何使用express+nodejs+mysql来实现一个简单的服务端demo,距离真正的项目还是有一定的距离。不过,这也算是有了一个开头,前端er也可以调试自己写的接口了,逐渐成为“全沾”工程师。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
712 1
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
1222 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
人工智能 监控 JavaScript
HarmonyOS5云服务技术分享--ArkTS开发Node环境
本文详细讲解了在HarmonyOS(ArkTS API 9及以上)中使用云函数的开发技巧,结合Node.js和HTTP触发器,从零开始手把手教学。内容涵盖核心能力、开发流程(配置到部署)、高阶优化及常见问题解决,并提供实际应用场景示例。助你快速掌握Serverless开发,提升效率,探索跨端协作与AI集成等未来方向。
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
582 10
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
423 13
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带你走进Node.js的世界,从基础到进阶,逐步解析Node.js在后端开发中的应用。我们将通过实例来理解Node.js的异步特性、事件驱动模型以及如何利用它处理高并发请求。此外,文章还会介绍如何搭建一个基本的Node.js服务器,并探讨如何利用现代前端框架与Node.js进行交互,实现全栈式开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
638 4
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。

推荐镜像

更多