区块链食品溯源案例实现(二)

引言

        随着前端界面的完成,我们接下来需要编写后端代码来与区块链网络进行交互。后端将负责处理前端发送的请求,调用智能合约的方法获取食品溯源信息,并将结果返回给前端。

通过前后端的整合,我们可以构建一个食品溯源系统,为用户提供便捷、安全的食品查询服务。

目录

引言

后端代码实现

安装依赖

首先,确保已经安装了Node.js和npm。然后,在项目根目录下执行以下命令安装依赖:

创建后端服务器

在项目根目录下创建一个名为server.js的文件,并编写以下代码:

配置环境变量

在项目根目录下创建一个名为.env的文件,并添加以下环境变量:

启动后端服务器

在项目根目录下执行以下命令启动后端服务器

修改前端代码中的请求地址

启动前端项目并测试

在前端项目根目录下执行以下命令启动前端项目:

总结



后端代码实现

  • 在本文中,我们将使用Node.js和Express框架来编写后端代码。同时,我们继续使用Web3.js库与区块链网络进行交互。
安装依赖
  • 首先,确保已经安装了Node.js和npm。然后,在项目根目录下执行以下命令安装依赖:
npm install express body-parser web3 dotenv

  • 其中,express用于构建Web服务器,body-parser用于解析前端发送的请求体,web3用于与区块链网络进行交互,dotenv用于加载环境变量。
  • 创建后端服务器
  • 在项目根目录下创建一个名为server.js的文件,并编写以下代码:
require('dotenv').config();  
const express = require('express');  
const bodyParser = require('body-parser');  
const Web3 = require('web3');  const app = express();  
app.use(bodyParser.json());  // 初始化Web3对象  
const web3 = new Web3(Web3.givenProvider || process.env.BLOCKCHAIN_PROVIDER);  // 连接到区块链网络(这里以本地开发环境为例)  
const contractAddress = process.env.CONTRACT_ADDRESS;  
const abi = JSON.parse(process.env.CONTRACT_ABI);  
const foodTraceabilityContract = new web3.eth.Contract(abi, contractAddress);  // 定义路由处理函数  
app.get('/food/:id', async (req, res) => {  try {  const foodId = req.params.id;  const foodInfo = await foodTraceabilityContract.methods.getFoodInfo(foodId).call();  res.json(foodInfo);  } catch (error) {  console.error(error);  res.status(500).json({ message: 'Error fetching food info' });  }  
});  // 启动服务器  
const port = process.env.PORT || 3001;  
app.listen(port, () => {  console.log(`Server is running on port ${port}`);  
});

  • 在上面的代码中,我们首先使用dotenv加载环境变量,这些环境变量包括区块链网络的提供商地址、智能合约的地址和ABI等。
  • 然后,我们创建了一个Express应用,并使用了body-parser中间件来解析请求体。接下来,我们初始化了Web3对象,并连接到区块链网络。
  • 最后,我们定义了一个路由处理函数/food/:id,用于处理前端发送的食品信息查询请求。
  • 在该函数中,我们根据请求中的食品ID调用智能合约的getFoodInfo方法获取食品信息,并将结果以JSON格式返回给前端。

配置环境变量

  • 在项目根目录下创建一个名为.env的文件,并添加以下环境变量:
BLOCKCHAIN_PROVIDER=YOUR_BLOCKCHAIN_PROVIDER  
CONTRACT_ADDRESS=YOUR_CONTRACT_ADDRESS  
CONTRACT_ABI=YOUR_CONTRACT_ABI


  • YOUR_BLOCKCHAIN_PROVIDER替换为你的区块链网络提供商地址(例如,本地开发环境的HTTP提供商地址),YOUR_CONTRACT_ADDRESS替换为你的智能合约地址,YOUR_CONTRACT_ABI替换为你的智能合约ABI的JSON字符串。
  • 启动后端服务器
  • 在项目根目录下执行以下命令启动后端服务器
node server.js

服务器将在指定的端口(默认为3001)上启动,并等待前端发送请求。

  • 现在,我们已经完成了前后端的编写和配置。
  • 接下来,我们需要将前端与后端进行整合,并进行测试。
修改前端代码中的请求地址
  • 在前端代码中,我们需要将请求地址修改为后端服务器提供的地址。
  • 打开src/FoodTraceability.js文件,找到发送请求的部分,将请求地址修改为后端服务器的地址和端口。例如:
// 修改请求地址为后端服务器的地址和端口  
fetch(`http://localhost:3001/food/${foodId}`)  .then(response => response.json())  .then(data => {  // 处理后端返回的食品信息数据  console.log(data);  // 更新UI等操作...  })  .catch(error => {  console.error('Error fetching food info:', error);  });

确保将http://localhost:3001/food/${foodId}中的localhost:3001替换为你实际服务器的地址.

  • 启动前端项目并测试
  • 在前端项目根目录下执行以下命令启动前端项目:
npm start

  • 前端项目将在指定的端口上启动(默认为3000)。打开浏览器,访问前端项目的地址,并进行食品信息查询操作。如果一切正常,你应该能够看到后端返回的食品信息,并在前端界面上展示出来。

总结

        通过本文的介绍,我们实现了基于区块链的食品溯源系统的后端代码,并与前端进行了整合。后端负责处理前端发送的请求,调用智能合约获取食品溯源信息,并将结果返回给前端。前后端的协同工作使得用户可以通过前端界面方便地查询食品的生产信息、流通信息等。

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

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

相关文章

spring boot3登录开发-3(2短信验证登录/注册逻辑实现)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 内容简介 功能分析 短信验证登录实现 1.创建交互对象 用户短信登录/注册DTO 创建用户登录VO…

Linux(CentOS)安装Redis教程_简单快捷

一、安装依赖 因为redis是用C语言开发的,所以在安装之前需要确定是否安装gcc环境(gcc -v),如果没有安转可以执行一下命令进行安装 [rootlocalhost ~]# yum install -y gcc 二、下载安装包 1.在官网先进行下载 官网地址&#x…

【接口测试】Postman(一)--接口测试知识准备

1.0 前言 ​ 应用程序编程接口(Application Programming Interface, API)是这些年来最流行的技术之一,强大的Web应用程序和领先的移动应用程序都离不开后端强大的API。API技术的应用给系统开发带来了便利,但也对测试人员提出了更…

Ubuntu joystick 测试手柄 xbox

Ubuntu joystick 测试手柄 xbox 测试使用Ubuntu20.04 测试环境在工控机 安装测试 实际测试使用的手柄是北通阿修罗2pro 兼容xbox Ubuntu20.04主机 连接手柄或者无线接收器后查看是否已经检测到: ls /dev/input找到输入中的 js0 即为手柄输入 需要安装joysti…

浅谈 kafka

引言 同事在公司内部分享了关于 kafka 技术一些相关的内容,所以有了这篇文章;部分图片选自网络摘抄; 1 Kafka概述 1.1 定义 Kafka传统定义:kafka是一个分布式的基于发布/订阅模式的消息队列。 Kafka最新定义:kafka…

【讲解下Gitea】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

突破编程_前端_JS编程实例(分割窗体组件)

1 开发目标 分隔窗体组件旨在提供灵活的窗体分隔功能,支持横向分割与纵向分隔两种类型,并具备拖拽调整窗体比例的功能,同时提供最小比例设置,以防止窗体被过度缩小: 2 详细需求 2.1 分隔窗体类型 (1&…

AI改写文案的注意事项

AI改写文案的注意事项 随着人工智能技术的不断发展,AI改写文案成为了一种新兴的应用场景。通过AI改写文案,可以快速生成大量内容,节省时间和人力成本,但在实际应用中也需要注意一些问题和注意事项。 1. 确保内容原创性 尽管AI改…

个人做量化交易是否可行呢?

考虑个人做量化交易,需要完成两步: 解决3个“什么”的问题:“你要在什么时间?交易什么标的?交易数量是多少?”把你的想法准确地表达出来,告诉交易下单系统 也就是自己形成策略----自己去实现。…

文件操作详解

1.为什么使用文件 目录 1.为什么使用文件 2.什么是文件 2.1程序文件 2.2数据文件 2.3文件名字 3.二进制文件与文本文件 4.文件的打开和关闭 4.1 流 4.2标准流 4.3文件指针 4.4 文件的打开和关闭 fopen fclose 5.文件的顺序读写 5.1文件读取结束原因的判定 5…

mysql 本地电脑服务部署

前提: 下载mysql 新建配置文档 在安装mysql目录新建 my.ini [mysqld] # 设置3306端口 port3306#设置mysql的安装目录 basedirC:\Program Files\MySQL\MySQL Server 8.3 #切记此处一定要用双斜杠\\,单斜杠我这里会出错,不过看别人的教程,有…

走进车厂 | 移远通信以前沿车载技术,照亮智能网联汽车产业创新发展之路

无钥匙自动解锁方便快捷、实时路况导航精准高效、语音指令轻松控制车辆、车载娱乐系统丰富多样……随着智能化、数字化浪潮的不断推进,现如今的汽车出行焕然一新。 正如我们所见,汽车产业正在经历前所未有的变革。物联网、车联网等前沿技术的发展和应用&…

argocd部署

一、前言 ArgoCD 是一个开源的、持续交付工具,用于自动化部署应用程序到 Kubernetes 集群。它基于 GitOps 理念,通过使用 Git 作为单一的源头来管理应用程序的配置和部署状态,argocd会定时监控git仓库中的yaml配置文件,当git仓库中…

后端前行Vue之路(二):模版语法之插值与指令

1.概述 Vue.js的模板语法是一种将Vue实例的数据绑定到HTML文档的方法。Vue的模板语法是一种基于HTML的扩展,允许开发者将Vue实例中的数据绑定到HTML元素,以及在HTML中使用一些简单的逻辑和指令。Vue.js 基于 HTML 的模板语法允许开发者声明式地将 DOM 绑…

瑞麦德机电设备将莅临2024第13届生物发酵展

参展企业介绍 河南瑞麦德机电设备有限公司是专业从事机械输送气力输送、称重配料、筛分、磁选设备研发和制造于一体的企业,公司采用国内外同行业产品的先进技术,经专业团队设计、研发、生产,产品满足“ISO9001”,“GMP”等标准要…

超图新建三维数据集继续学习

1 新建三维数据集 之前操作过新建三维数据集,还不熟悉,继续熟悉; 现在有一个文件型的数据源,名为swtest1;它前面小图标上有UDX三个字母,表明这是一个UDX类型的数据源;在此数据源上右击&#x…

LEAP模型的能源环境发展、碳排放建模预测及不确定性分析教程

原文链接:LEAP模型的能源环境发展、碳排放建模预测及不确定性分析教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599754&idx4&sn243c9f8bff355235a7056c2cbb1331fa&chksmfa82076dcdf58e7b871c3369c95ead9ff1d90baa0431318b26b6abd27…

剑指offer--数组中重复的数字

一.题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 算法1.排序,然后遍历,时间复杂度O(nlogn),空…

Flask Python:请求上下文和应用上下文

请求上下文和应用上下文详解 一、背景二、什么是上下文2.1、请求上下文2.2、应用上下文2.3、两种上下文的底层逻辑 三、写在最后 一、背景 在如何实现异步发送邮件的时候,遇到过这样一个报错 RuntimeError: Working outside of request context.This typically me…

Mysql实战--为什么表数据删掉一半,表文件大小不变

经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? 那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题。 这里,我们还是针…