这边你需要自己制作一个流程控制
不了解的话建可以画个图来确认现在在哪个流程
基本上都会回到主要操控介面
所以这边会先建立 start 流程并呼叫对应进入页面
index.js 呼叫流程控制
const http = require("http");
const { receiveTelegram } = require("./botHook/main");
const flowController = require("./controller/flowController");
var server = http.createServer(async function (req, res) {
let url = req.url.split("?")[0];
let paramrter = req.url.split("?")[1];
if (paramrter) paramrter = getUrlParameter(paramrter);
let data = null;
let buffers = [];
for await (const chunk of req) {
buffers.push(chunk);
}
data = Buffer.concat(buffers).toString();
data = data ? JSON.parse(data) : null;
// 上方获取资料区
// 这边开始实作 url
if (url === "/") {
res.writeHead(200, { "Content-Type": "application/json" });
// 实作判断请求
if (req.method === "POST") {
if (data) {
receiveTelegram(data, res);
}
res.end();
} else {
res.write("404 page");
res.end();
}
} else {
res.write("404 page");
res.end();
}
});
server.listen(3000);
flowController.start();
/**
* @description 用来确认是否有带参数
*
* @param {string} reqUrl url ? 後面的部分
* @return {*}
*/
function getUrlParameter(reqUrl) {
var url = reqUrl; //获取url中"?"符後的字串
var theRequest = new Object();
var strs = null;
strs = url.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
return theRequest;
}
新增控制流程的 controller\flowController.js
controller\flowController.js
const viewPrinter = require("../view/viewPrinter");
class FlowController {
constructor() {}
/**
* @description 确保都拿到同一个实例
*
* @static
* @return {*}
* @memberof ConsoleItem
*/
static getInstance() {
if (!this.instance) {
this.instance = new this();
}
return this.instance;
}
/**
* @description 起始画面
*
* @memberof FlowController
*/
async start() {
await viewPrinter.welcome();
console.log("nextTick");
}
}
let flowController = FlowController.getInstance();
module.exports = flowController;
接着制作 view\viewPrinter.js 来印画面
view\viewPrinter.js
const consoleItem = require("../interface/consoleItem");
class ViewPrinter {
constructor() {}
/**
* @description 确保都拿到同一个实例
*
* @static
* @return {*}
* @memberof ConsoleItem
*/
static getInstance() {
if (!this.instance) {
this.instance = new this();
}
return this.instance;
}
/**
* @description 欢迎你
*
* @memberof ViewPrinter
*/
async welcome() {
return new Promise((resolve) => {
let str = [
"=======================================================",
"=======================================================",
"============ ============",
"============ Welcome Node Telegram ============",
"============ ============",
"=======================================================",
"=======================================================",
]
console.log("\x1b[36m");
for( let i = 0 ; i < str.length ; i++ ) {
setTimeout(() => {
console.log(str[i]);
if(i === str.length -1) {
console.log("\x1b[0m");
resolve();
};
}, i * 100);
}
})
}
}
let viewPrinter = ViewPrinter.getInstance();
module.exports = viewPrinter;
当然一样不能一口气印出来
所以弄成 Promise 确保结束後再执行下一段 nextTick
这里是非同步与同步的概念 async await 等等
<<: Day25 能不能给我一首歌的时间 这首歌我希望是十年
>>: D11 - 彭彭的课程#Python 流程控制:回圈进阶控制,break、continue、else 命令
过去一周我们提到了物件导向程序设计的重要概念,像是类别、抽象类别、介面,以及四大特徵:抽象、封装、继...
快照测试第一时间听起来好像是会「帮我们的画面做一个快照,纪录下来当时的画面」,但这样的说法对也不对...
Single Number 黑魔法集合.... 题目连结:https://leetcode.com...
昨天说到Microsoft 365 开发人员计画 (Microsoft 365 Developer ...
阵列(Array)是JavaScript提供的内建物件,主要功能是提供一连串具有连续性的储存空间。值...