node+express+soket.io+ts

苏彭薄
2023-12-01

node+express+soket.io+ts

第一次 写完整的博客 希望各位大佬 多多帮助

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

1 简单介绍

环境配置

  • 编辑器 webstrom
    -ruby
    -sass
  1. node+express+soket.io+ts
  2. npm i soket.io/yarn add soket.io
  3. “dependencies”: {
    “@types/chai”: “^4.2.11”,
    “@types/express”: “^4.17.7”,
    “@types/mocha”: “^7.0.2”,
    “babel-preset-env”: “^1.7.0”,
    “babelify”: “^10.0.0”,
    “chai”: “^4.2.0”,
    “cookie-parser”: “~1.4.4”,
    “d3-node”: “^2.2.2”,
    “d3-selection-multi”: “^1.0.1”,
    “debug”: “~2.6.9”,
    “ejs”: “~2.6.1”,
    “express”: “~4.16.1”,
    “grunt”: “^1.2.1”,
    “grunt-contrib-copy”: “^1.0.0”,
    “grunt-contrib-watch”: “^1.1.0”,
    “grunt-ts”: “^6.0.0-beta.22”,
    “http-errors”: “~1.6.3”,
    “jsdom”: “^16.3.0”,
    “mocha”: “^8.0.1”,
    “morgan”: “~1.9.1”,
    “node-compass”: “0.2.3”,
    “nodemon”: “^2.0.4”,
    “socket.io”: “^2.3.0”,
    “ts-node”: “^8.10.2”,
    “typescript”: “^3.9.6”
    }
  • 创建成中中间

创建一个表格

一个简单的表格是这么创建的:

  • 文件目录
  • bin
    • www.ts
  • public
    • images
    • javescripts
    • layui
    • sass
    • stylessheets
  • routes
    • index.ts
    • users.ts
  • util
    • daili.ts
  • view
    ejs
    app.ts
    nodeman.json
    packages.json

#!/usr/bin/env node

import {Daili} from "../util/daili";

/** 服务端 核心代码如下 客户端 要有一个say
 * Module dependencies.
 */

var app = require('../app.ts');
var debug = require('debug')('untitled:server');
// var http = require('http');
const http = require("http").createServer(app);
const io = require("socket.io")(http);
// import {Daili} from "../util/daili.ts"
let num =new Daili()
io.on("connection", socket => {  // 客户端链接成功

    socket.on("监听频道", msg => {  // 监听的频道必须和客户端监听的频道相同,等待消息
        io.emit("监听频道", "发送的信息");  // 向所有客户端发送信息

    });
    socket.on('chat message', (msg) => {
        num.addNum()
        socket.emit("allNum",num.allNum)
        console.log('message: ' + msg);
        socket.emit("chat message","我是服务端")
        socket.broadcast.emit("msg",{data:"hello,everyone,我加入進來了"});
        // io.to(`${socketId}`).emit('hey', 'I just met you');
        io.to(`${socket.id}`).emit('hey', 'I just met you');
    });
    socket.on("disconnect", (msg) => {  // 客户端断开链接
        console.log('退出了一位用戶');
        num.jianjian()
        socket.emit("allNum",num.allNum)
    });


});


/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
    var port = parseInt(val, 10);

    if (isNaN(port)) {
        // named pipe
        return val;
    }

    if (port >= 0) {
        // port number
        return port;
    }

    return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
    if (error.syscall !== 'listen') {
        throw error;
    }

    var bind = typeof port === 'string'
        ? 'Pipe ' + port
        : 'Port ' + port;

    // handle specific listen errors with friendly messages
    switch (error.code) {
        case 'EACCES':
            console.error(bind + ' requires elevated privileges');
            process.exit(1);
            break;
        case 'EADDRINUSE':
            console.error(bind + ' is already in use');
            process.exit(1);
            break;
        default:
            throw error;
    }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string'
        ? 'pipe ' + addr
        : 'port ' + addr.port;
    debug('Listening on ' + bind);
}




  1. mermaid语法说明 ↩︎

 类似资料: