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

引言

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

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

目录

引言

后端代码实现

安装依赖

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

创建后端服务器

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

配置环境变量

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

启动后端服务器

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

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

启动前端项目并测试

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

总结



后端代码实现

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

  • 其中,express用于构建Web服务器,body-parser用于解析前端发送的请求体,web3用于与区块链网络进行交互,dotenv用于加载环境变量。
创建后端服务器
在项目根目录下创建一个名为server.js的文件,并编写以下代码:
javascript 复制代码
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的文件,并添加以下环境变量:
bash 复制代码
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字符串。
启动后端服务器
在项目根目录下执行以下命令启动后端服务器
bash 复制代码
node server.js

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

  • 现在,我们已经完成了前后端的编写和配置。
  • 接下来,我们需要将前端与后端进行整合,并进行测试。
修改前端代码中的请求地址
  • 在前端代码中,我们需要将请求地址修改为后端服务器提供的地址。
  • 打开src/FoodTraceability.js文件,找到发送请求的部分,将请求地址修改为后端服务器的地址和端口。例如:
javascript 复制代码
// 修改请求地址为后端服务器的地址和端口  
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替换为你实际服务器的地址.

启动前端项目并测试
在前端项目根目录下执行以下命令启动前端项目:
bash 复制代码
npm start

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

总结

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

相关推荐
极客悟道3 分钟前
巧解 Docker 镜像拉取难题:无需梯子和服务器,拉取数量无限制
后端·github
代码的余温11 分钟前
5种高效解决Maven依赖冲突的方法
java·maven
慕y27414 分钟前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba21 分钟前
Maven
java·maven
aiopencode23 分钟前
iOS 出海 App 安全加固指南:无源码环境下的 IPA 加固与防破解方法
后端
liangdabiao27 分钟前
AI一人公司?先搞定聚合支付!一天搞定全能的聚合支付系统
后端
AillemaC32 分钟前
三分钟看懂回调函数
后端
yeyong34 分钟前
越学越糟心,今天遇到又一种新的服务控制方式 snap,用它来跑snmpd
后端
夕水34 分钟前
ew-vue-component:Vue 3 动态组件渲染解决方案的使用介绍
前端·vue.js
喷火龙8号36 分钟前
深入理解MSC架构:现代前后端分离项目的最佳实践
后端·架构