以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

一.基本常识讲解

1.鸿蒙原生语言ArkTs

ArkTS是一种被设计用来构建高性能应用的编程语言。它在继承TypeScript语法的根基上进行了优化,以此来实现更高的性能表现与开发效率。

很多编程语言在最初设计时没有把移动设备的情况考虑进去,这就导致应用运行起来缓慢、低效且耗电量大。随着移动设备在日常生活中越来越普遍,针对移动环境对编程语言进行优化的需求也越来越迫切。ArkTS就是为解决这类问题而设计的,其重点在于提升运行效率。

TypeScript是在JavaScript的基础上通过添加类型定义来进行扩展的,而ArkTS则是对TypeScript的进一步拓展。TypeScript为JavaScript编码提供了一种更为结构化的方法,深受开发者们的喜爱。ArkTS保留了TypeScript的大部分语法,旨在让现有的TypeScript开发者能够实现无缝过渡,帮助移动开发者快速上手。

ArkTS的一个显著特性是它专注于降低运行时开销。ArkTS对TypeScript的动态类型特性施加了更为严格的限制,从而减少运行时的开销,提高执行效率。通过消除动态类型特性,ArkTS代码能够更有效地在运行前进行编译和优化,进而实现更快的应用启动速度和更低的功耗。

在ArkTS的语言设计中考虑到了与TypeScript和JavaScript的互通性。许多移动应用开发者希望能够重用TypeScript和JavaScript的代码及库,所以ArkTS提供了与TypeScript和JavaScript的无缝互通,使得开发者能够轻松地将TypeScript和JavaScript代码集成到应用中,充分利用已有的代码和库来进行ArkTS开发。

ArkTs的优点数不胜数,作为一名本科新生,我理解它作为鸿蒙原生编程语言,在推动产品国产化进程中有着其他语言无法比拟的作用。同样,华为新推出的仓颉原生语言(Cangjie)也有着强大的功能,未来博主可能会推出一些基于仓颉的实现项目,也欢迎大家提出指正和支持!

本项目着重于应用,仅仅使用一些基础的ArkTs语法来实现。具体的ArkTs相应语法以及示例代码可以在鸿蒙开发者平台进行学习!

开发-HarmonyOS NEXT鸿蒙应用开发平台-
华为开发者联盟

也能够在B站黑马程序员处学习基础语法:

【全网首发黑马程序员鸿蒙 HarmonyOS
NEXT星河版零基础入门到实战,零基础也能快速入门鸿蒙开发教程】https://www.bilibili.com/video/BV14t421W7pA?vd_source=ded291221abbad7d078b6a45fa46c6d2

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

2.Node.js

Node.js是基于Chrome JavaScript运行时构建的一个平台,其本质是js语言,npm(Node Package Manager)拥有数以百万计的开源包,只需在终端输入npm install ......就能便捷地下载调用,可将其视作编写后端代码极为高效便捷的工具。

Node.js是一个基于事件驱动的I/O服务端JavaScript环境,它基于Google的V8引擎,执行Javascript的速度非常快,运行起来相当流畅。

在我看来,Node.js像是一个框架,它并非一门像python、c++等那样的编程语言,而是一个运行js代码的框架,也就是说它在下载后就存在于你的操作系统之中了,你只需要在终端中输入node要执行的js文件的路径就能启动Node.js了,这样是不是更好理解了?

同时建议先学习javascript的基础语法,这样才能读懂代码并进行js文件的编写。

相应的学习路径推荐黑马程序员的javascript与Node.js系列课程。

【黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程】https://www.bilibili.com/video/BV1Y84y1L7Nn?p=2&vd_source=ded291221abbad7d078b6a45fa46c6d2

【黑马程序员Node.js全套入门教程,nodejs新教程含es6模块+npm+express+webpack+promise等_Nodejs实战案例详解】https://www.bilibili.com/video/BV1a34y167AZ?p=5&vd_source=ded291221abbad7d078b6a45fa46c6d2

官方下载路径如下,可以下载zip并解压安装即可:

Node.js — Download Node.js®

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

3.MySQL数据库

数据库(Database)是依照数据结构来对数据进行组织、存储以及管理的存储场所。

我们也可以把数据存储在文件里,但是在文件中读写数据的速度相对较慢。

所以,现在我们运用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是构建在关系模型基础上的数据库,借助集合代数等数学概念和方法来处理数据库中的数据。

RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
1. 数据以表格的形式呈现
2. 每一行代表各种记录名称
3. 每一列是记录名称所对应的数据域
4. 众多的行和列构成一张表单
5. 若干的表单组成database

而MySQL恰好就是这样一个数据库,而且简单易上手,这里需要一些MySQL的基础知识,可以学习B站上程序不打烊的课程就足够。

【【SQL数据库】SQL两小时半快速入门到精通 建议反复观看
学不会自我反省】https://www.bilibili.com/video/BV1yw4m1S7Be?vd_source=ded291221abbad7d078b6a45fa46c6d2

4.http通信

HTTP是万维网数据通信的基石,其设计初衷是保障客户端与服务器之间的通信,是互联网上应用极为广泛的协议之一。

对于http在各个操作系统(安卓,苹果,鸿蒙)上其实都有不同的编写方法,但是好在对于http,所有语言基本都具有非常好的API与封装可供调用,这就大大方便了我们开发者进行调用,而且万变不离其宗,主要都是进行一些配置,这里可以通过学习菜鸟教程对其有个大致的认知:

HTTP 教程 | 菜鸟教程

而对于鸿蒙相关的http,博主在一开始也踩了很多坑,它跟平常的http不太一样,流程是:
- 导入相应模块
- 使用http模块
1. 创建一个请求对象
2. 发起网络请求
3. 处理响应结果
4. 必要的时候使用类(Promise),可以理解为异步请求,就是可以在将来拿到这个数据,也即在服务器拿到。

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

具体可以通过黑马程序员的相关教程进行学习(里面的http模块):

【黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发】https://www.bilibili.com/video/BV1Sa4y1Z7B1?vd_source=ded291221abbad7d078b6a45fa46c6d2

华为http官方技术文档:

文档中心

在这个连接之中我们需要用到两次http,一次在使用http连接后端与MySQL数据库之中,我们主要在js代码中进行配置,另一次是使用http连接前后端,我们主要在ArkTs代码中配置,因而对两种我们都要有所了解。

5.相关技术平台准备

前端代码的开发平台:DevEco Studio

DevEco Studio-
鸿蒙应用集成开发环境(IDE)-华为开发者联盟

后端代码的开发平台:Visual Studio Code

数据库使用平台:MySQL以及MySQL Workbench,可以跟着我前面的程序不打烊的B站教程进行下载安装就好啦!

二.项目实现

1.数据库基本部署

1.新建总的资源存放位置
以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

下载完MySQL Workbench之后我们可以点击左下角的加号新建自己的资源存放位置,里面我们存放数据库以及相对应的表单等,这里我们要把信息记住,后续我们配置后端连接数据库会用到,以我这里举例:

localhost就是127.0.0.1(一般自己的主机都是这个IP,部署到云服务器则有别的IP地址)

user就是root(在自己没修改之前默认都是这样)

password就是当初安装时设置的密码

port就是3306端口号

2.创建数据库与表单
以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

这些包括harmony,sys,your_database就是你自己创建数据库的名称啦,右键可以创建表单的总存放处,再右键即可创建表单啦,这里面的mytable就是表单,而左键点击后会有我所创建的Column的显示,以及对应的数据类型,我建了三行Column,其中id为主键。(怎么创建可观看B站教程)

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

到这里我们简单完成了数据库的对应配置啦!

下面来到重头戏,两次连接的主要实现

2.使用http连接js后端与MySQL数据库,并可以在服务器实现数据查询

1.基础配置(npm)

在Vscode里下载js插件,并新建一个js文件,新建一个新的终端,下载对应的我们要使用的Node.js的包。

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信
2.导入对应模块
const express = require('express');
const mysql = require('mysql2');
3.新建服务器并配置端口(注意区分MySQL的端口)
const app = express();
const port = 3000;
4.数据库连接配置
// 数据库连接配置
const db = mysql.createConnection({
  host: 'localhost',      // 数据库主机地址
  user: 'root',  // 数据库用户名
  password: '', // 数据库密码
  database: '', // 数据库名
  port: 3306,            // 数据库端口
});

//连接确认
db.connect((err: BusinessError<void>, resp: http.HttpResponse) => {
  if (err) {
    console.error('数据库连接失败:', err.stack);
    return;
  }
  console.log('已连接到数据库');
});
5.在服务器进行数据查询
//自己规定端口号
app.get('/api/getData', (req, res) => {
  const markerId = req.query.id;
  const sql = 'SELECT id, height, picture FROM mytable WHERE id = ? LIMIT 1';

  //query查询
  db.query(sql, [markerId], (error, results) => {
    if (error) {
      console.error('数据库查询失败:', error.stack);
      res.status(500).send('数据库查询失败');
      return;
    }

    if (results.length > 0) {
      const result = results[0];

  //json格式输出
      res.json({
        id: result.id,
        height: result.height,
  //picture可忽略因为我在这里进行了BLOB编码格式转二进制的操作
        picture: pictureBase64 ? `data:image/jpeg;base64,${pictureBase64}` : null,
      });
    } else {
      res.status(404).send('未找到数据');
    }
  });
});
6.监听服务器运行情况
app.listen(port, () => {
  console.log(`服务器运行在 http://localhost:${port}`);
});
7.实现效果

terminal终端中:

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

浏览器中成功获取到数据(null是因为我没传图片):

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

3.使用http连接前后端

这里因为项目的需要,我从后端拉取数据用的是数据库里的id作为主键进行数据区分,大家可自行修改。

1.导入HTTP模块,我们可以调用它的API
//导入http模块
import http from '@ohos.net.http';
2.撰写一个异步函数

获取从后端拿过来的数据,并进行封装方便后续调用,具体代码如下

// 获取数据函数
      //向后端拉取数据并更新页面状态
      async fetchDataFromBackend(markerId: string) {
        // -------------------------------------------------
        // 外层 try-catch:捕获整个“发请求”流程中的任何同步异常
        // -------------------------------------------------
        try {
          // 1) 创建 HTTP 客户端
          const httpRequest = http.createHttp();

          // 2) 拼装 GET 请求配置
          const options: http.HttpRequestOptions = {
            method: http.RequestMethod.GET,
            // 在 URLSearchParams 里带 id=markerId
            extraData: { id: markerId }
          };

          // 3) 发起异步请求
          httpRequest.request(
            'http://localhost:3000/api/getData',
            options,
            (err: BusinessError<void>, resp: http.HttpResponse) => {
              // -------------------------------------------------
              // 回调里的 try-catch:捕获“回调内部”的同步异常
              // -------------------------------------------------
              try {
                if (err) {
                  console.error('请求出错:', err);
                  return;
                }

                if (resp.responseCode === 200) {
                  try {
                    // 解析后端返回的 JSON
                    const data = JSON.parse(resp.result as string) as ApiResponse;

                    // 把解析结果写进组件状态(驱动 UI 更新)
                    this.text = `ID: ${data.id}\n离地高度:${data.height}m\n`;
                    this.pictureUrl = data.picture;
                  } catch (parseError) {
                    // 捕获 JSON 解析失败
                    console.error('解析失败:', parseError);
                  }
                } else {
                  console.error('请求失败,状态码:', resp.responseCode);
                }
              } catch (callbackError) {
                // 捕获回调里除 JSON 解析以外的其他同步异常
                console.error('回调内异常:', callbackError);
              }
            }
          );
        } catch (error) {
          // 捕获“创建 HTTP 客户端、拼装 options”等步骤中的同步异常
          console.error('获取数据失败:', error);
        }
      }
3.实现效果

这样我们就实现了前后端的连接!其重点在于这里

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

这与后端的接口是对应的,这也就是前后端设计员常说的对接口

以鸿蒙ArkTs为前端依托Node.js后端对接MySQL达成数据查询通信

三.结语

1.学习平台推荐

在这里感谢一些帮助到我完成这个流程的平台

B站黑马程序员:

![](https://i-blog.csdnimg.cn/direct/e81a

相关文章

暂无评论

暂无评论...