痛点
最近被分配去某个项目做开发,该项目只剩下一名常驻嘉宾,又有版本和现网问题需要支撑,这就导致开发需求的时候,常驻嘉宾几乎没在线过,一直在解问题单。原计划两人投入的需求随着时间推移,风险也越来越大,截至发稿前该嘉宾还在公司疯狂解问题,亦或是在顶着苏州的风雨骑着踏板车回家的路上,闻者伤心,听着落泪,实在是太惨了。
和该嘉宾深入交流后发现,部分问题他在过去半年碰到过五十多次,而问题的定位结论只要排查下对应的日志和错误码就可以转交给其他模块。如果能将这部分问题加以总结并抽象出来,提供一个简单的排查手段给测试,就能达到解放WDK部分生产力的目的,让其投入到需求开发中。
所以萌生出一个让问题提出人自己排查问题的想法。根据个人经验,笔者相当主观的认为,如果通过wiki或博客总结定位结论,对于有些人来说可能觉得过于繁琐,通过问答机器人的形式可能更为简单。所以我们的目标就是
技术选型
nodejs(别的也可以,笔者只会这个,实在太菜了)
夸一夸nodejs
全栈开发:
Node.js不仅适合作为后端服务器,还可以用于前端开发、数据库操作、API接口开发等多个方面。这使得开发者可以使用同一种语言(JavaScript)完成整个项目的开发,提高了开发效率和代码的一致性。
丰富的生态系统:
Node.js拥有庞大的第三方库和框架生态,如Express、Koa、Socket.IO等,这些库和框架为开发者提供了丰富的功能和强大的支持,降低了开发难度。
跨平台性:
Node.js可以在多个操作系统上运行,包括Windows、Linux和macOS等。这使得开发者可以在不同的平台上进行开发和部署,提高了项目的可移植性和灵活性。
开源和免费:
Node.js是一个开源项目,拥有庞大的社区支持和丰富的文档资源。开发者可以免费使用Node.js及其相关库和框架,并根据需要进行定制和扩展。
易于扩展:
Node.js的模块化设计使得代码易于扩展和维护。开发者可以根据需要添加或删除模块,以满足项目的不同需求。此外,Node.js还支持分布式部署和负载均衡等技术,可以轻松地实现水平扩展和垂直扩展。
适合微服务架构:
随着微服务架构的兴起,Node.js因其轻量级、高性能和易于扩展的特点而备受青睐。开发者可以使用Node.js构建独立的微服务,通过API网关实现服务的解耦和整合,提高系统的灵活性和可扩展性。
代码实现
准备工作
linux上安装node (见wiki)windows也能装
1.首先,确保你已经安装了Node.js。
2.创建一个新的项目文件夹,并在终端中运行npm init来初始化一个新的Node.js项目。
3.安装Express.js,运行npm install express --save。
// app.js
const express = require('express');
const app = express();
const port = 3000; // 找一个没人用的端口
// 中间件,用于解析JSON请求体
app.use(express.json());
// 定义一个GET路由,返回一些数据
app.get('/wdk', (req, res) => {
res.send({ message: 'Hello, WDK, how old are you?' });
});
// 定义一个POST路由,接收JSON数据
app.post('/submit', (req, res) => {
const data = req.body;
// 处理接收到的数据
console.log(data);
res.send({ message: 'Data received', data });
});
app.listen(port, () => {
console.log(`Server running on http://localhost:${port}`);
});
运行
node app.js
到目前为止,一个简易的后端服务就搭建好了,试试效果
在浏览器输入框输入http://本机ip:3000/wdk 就能得到我们get请求中的数据
那如何实现我们想要的问答系统呢?
简化:首先我们只需要用到get请求,这就简化了很多,而且因为数据量实在有限,也没有加入数据库的必要,所以我们首先要选择的就是get请求。
然后我们需要获取用户点击的是哪个问题,就涉及传参,我们需要修改get请求获取参数:
// 定义一个GET路由,返回一些数据
app.get('/wdk/:id', (req, res) => {
// 通过 req.params.id 获取 id 参数
const id = req.params.id;
res.send({ message: 'Hello, WDK, how old are you?' + id });
});
url 通过这种方式传参:
这里笔者通过数组来实现一个树形结构,节点本身代表问题,子节点为问题的部分情况。以此来实现一个简易的问答系统。各位看官大老爷也可以实现自己的想法。
// 定义一个GET路由,返回一些数据
app.get('/wdk/:id', (req, res) => {
// 通过 req.params.id 获取 id 参数
const id = req.params.id;
res.send({ message: findById(data, id) });
});
let data = [
{
name: "wdk",
id: "wdk",
imgList: [],
description: "wdk eat what for lunch?",
children: [
{
name: "sanminzhi",
id: "sanminzhi",
imgList: [],
description: "wdk eat sanminzhi for lunch, but how much did wdk pay?",
children: [
{
name: "free",
id: "free",
imgList: [],
description: "wdk never pay for lunch.",
children: []
}
]
},
{
name: "hanbaga",
id: "hanbaga",
imgList: [],
description: "wdk eat hanbaga for lunch, but how much did wdk pay?",
children: [
{
name: "10",
id: "10",
imgList: [],
description: "Wdk paid ten yuan for a hamburger, but the hamburger fell on the ground and was eaten by a dog",
children: []
}
]
},
]
}
]
到此为止 我们就有了一个自助问答系统的雏形,解放WDK,指日可待!
前端
前端?
得加钱。