引言
随着前端界面的完成,我们接下来需要编写后端代码来与区块链网络进行交互。后端将负责处理前端发送的请求,调用智能合约的方法获取食品溯源信息,并将结果返回给前端。
通过前后端的整合,我们可以构建一个食品溯源系统,为用户提供便捷、安全的食品查询服务。
目录
首先,确保已经安装了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)。打开浏览器,访问前端项目的地址,并进行食品信息查询操作。如果一切正常,你应该能够看到后端返回的食品信息,并在前端界面上展示出来。
总结
通过本文的介绍,我们实现了基于区块链的食品溯源系统的后端代码,并与前端进行了整合。后端负责处理前端发送的请求,调用智能合约获取食品溯源信息,并将结果返回给前端。前后端的协同工作使得用户可以通过前端界面方便地查询食品的生产信息、流通信息等。