写出代码:编写一网站,可上传个人信息(头像,姓名学号) ,并在网页中显示, 可进行基于文件的简单的匹配查询。 思路:每上传一个用户信息生成一个新的html文件
时间: 2024-03-30 15:36:41 浏览: 98
好的,我可以给出一个基于Node.js和Express框架的代码实现示例,具体细节需要根据实际情况进行调整和完善。
1. 安装依赖
首先需要安装Node.js、Express、Multer和EJS等依赖库,可以使用以下命令进行安装:
```
npm install express multer ejs
```
2. 设计前端页面
设计一个包含上传和查询功能的页面,可以上传用户信息(包括头像、姓名、学号等),并在页面中显示出来。页面还需要一个查询框,可以输入关键字进行简单的匹配查询。
```html
<!-- index.ejs -->
<!DOCTYPE html>
<html>
<head>
<title>上传用户信息</title>
</head>
<body>
<h1>上传用户信息</h1>
<!-- 文件上传表单 -->
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="avatar">头像:</label>
<input type="file" id="avatar" name="avatar" accept="image/*"><br>
<label for="name">姓名:</label>
<input type="text" id="name" name="name"><br>
<label for="studentId">学号:</label>
<input type="text" id="studentId" name="studentId"><br>
<button type="submit">上传</button>
</form>
<!-- 查询框 -->
<h2>查询用户信息</h2>
<input type="text" id="keyword" name="keyword">
<button onclick="search()">查询</button>
<!-- 用户信息列表 -->
<ul id="userList"></ul>
<!-- JavaScript代码 -->
<script src="/js/jquery-3.5.1.min.js"></script>
<script src="/js/index.js"></script>
</body>
</html>
```
在`public`文件夹下创建`js`文件夹,并在其中创建`jquery-3.5.1.min.js`和`index.js`文件。
`jquery-3.5.1.min.js`是jQuery库的文件,`index.js`包含了前端页面的JavaScript逻辑,包括文件上传和查询等功能。
```javascript
// index.js
// 文件上传
$("form").submit(function(event) {
event.preventDefault(); // 阻止表单默认提交行为
// 使用FormData对象上传文件和文本数据
var formData = new FormData(this);
$.ajax({
url: "/upload",
type: "POST",
data: formData,
processData: false, // 不处理数据
contentType: false, // 不设置内容类型
success: function(data) {
console.log(data);
alert("上传成功!");
// 刷新页面
location.reload();
},
error: function(jqXHR, textStatus, errorThrown) {
console.error(textStatus, errorThrown);
alert("上传失败!");
}
});
});
// 查询用户信息
function search() {
var keyword = $("#keyword").val().trim();
if (keyword === "") {
alert("请输入关键字!");
return;
}
$.ajax({
url: "/search",
type: "GET",
data: { keyword: keyword },
success: function(data) {
console.log(data);
// 清空用户信息列表
$("#userList").empty();
// 显示用户信息
data.forEach(function(user) {
var li = $("<li>").appendTo("#userList");
$("<img>").attr("src", user.avatar).appendTo(li);
$("<span>").text(user.name).appendTo(li);
$("<span>").text(user.studentId).appendTo(li);
$("<a>").attr("href", user.htmlPath).text("详情").appendTo(li);
});
},
error: function(jqXHR, textStatus, errorThrown) {
console.error(textStatus, errorThrown);
alert("查询失败!");
}
});
}
```
3. 设计后端接口
后端需要提供上传和查询两个接口。上传接口接收前端上传的用户信息,包括头像、姓名、学号等,并将这些信息保存到服务器上。每次上传用户信息后,后端需要生成一个新的HTML文件,来展示该用户信息。
查询接口接收前端传来的关键字,然后在服务器上进行简单的匹配查询,查找匹配的用户信息。查询到的用户信息需要通过AJAX返回给前端,并在页面上展示出来。
```javascript
// app.js
const express = require("express");
const multer = require("multer");
const path = require("path");
const fs = require("fs");
const app = express();
// 配置静态文件目录
app.use(express.static(path.join(__dirname, "public")));
// 配置文件上传中间件
const upload = multer({
dest: "uploads/",
limits: {
fileSize: 1024 * 1024 * 5 // 限制上传文件大小为5MB
}
});
// 配置EJS模板引擎
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");
// 上传用户信息
app.post("/upload", upload.single("avatar"), function(req, res) {
// 获取上传的文件和文本数据
console.log(req.file);
console.log(req.body);
// 保存用户信息到数据库
// ...
// 生成新的HTML文件
const user = {
avatar: req.file.path,
name: req.body.name,
studentId: req.body.studentId
};
const htmlPath = path.join(__dirname, "public", "users", `${user.studentId}.html`);
const htmlContent = `
<!DOCTYPE html>
<html>
<head>
<title>${user.name}</title>
</head>
<body>
<h1>${user.name}</h1>
<img src="${user.avatar}" alt="${user.name}">
<p>学号:${user.studentId}</p>
</body>
</html>
`;
fs.writeFile(htmlPath, htmlContent, function(err) {
if (err) {
console.error(err);
res.status(500).send("生成HTML文件失败!");
} else {
console.log(`HTML文件${htmlPath}已生成。`);
res.send("上传成功!");
}
});
});
// 查询用户信息
app.get("/search", function(req, res) {
const keyword = req.query.keyword;
// 在数据库中查询匹配的用户信息
// ...
// 返回匹配的用户信息
const users = [
{
avatar: "/uploads/avatar.jpg",
name: "张三",
studentId: "20190101",
htmlPath: "/users/20190101.html"
},
{
avatar: "/uploads/avatar.jpg",
name: "李四",
studentId: "20190102",
htmlPath: "/users/20190102.html"
}
];
res.send(users);
});
// 启动服务器
const port = 3000;
app.listen(port, function() {
console.log(`服务器已启动,访问http://localhost:${port}查看网站。`);
});
```
在`public`文件夹下创建`uploads`和`users`文件夹,用于保存上传的文件和生成的HTML文件。
4. 运行网站
在终端中运行以下命令启动服务器:
```
node app.js
```
然后在浏览器中输入`http://localhost:3000/`,即可看到前端页面。上传用户信息后,会生成一个新的HTML文件,用于展示该用户信息。在查询框中输入关键字,即可查询匹配的用户信息。
阅读全文