React Ant Design+Node.js Express+Mysql实现后端分页

home.jsx

import React, { Component } from 'react'
import { Table } from 'antd';
import axios from 'axios'

export default class Home extends Component {
    state = {
        selectedRowKeys: [], // 表格选择项Keys
        selectedRows: [], // 表格选择项Rows
        tableData: [],
        total: 0
    }

    getColumns = () => {
        return [
            {
                title: 'ID',
                dataIndex: 'id',
                width: 30,
            },
            {
                title: '标题',
                dataIndex: 'title',
                width: 500,
                render: (text, record) => <a href="javascript: void(0)" target="_self" onClick={() => this.handleShowDetailBlog(record.id)}>{text}</a>
            },
            {
                title: '内容',
                dataIndex: 'content',
                render(text, record) {
                    return <div dangerouslySetInnerHTML={{ __html: record.content }} style={{}} />
                }
            },
            {
                title: '发布时间',
                dataIndex: 'datetime'
            }
        ];
    }

    // 获取表格数据
    getData(pageNumber, pageSize) {
        axios.get(`http://localhost:5555/api/blog_list/?pageSize=${pageSize}&pageNumber=${pageNumber}&sortName=id&sortOrder=desc&_=1595230808893`).then((resp) => {
            let ajaxData = [];
            for (let i = 0; i < resp.data.rows.length; i++) {
                ajaxData.push({
                    key: resp.data.rows[i].id,
                    id: resp.data.rows[i].id,
                    title: resp.data.rows[i].title,
                    content: resp.data.rows[i].content.replace(/<[^>]*>|<\/[^>]*>/gm, "").substring(0, 54),
                    datetime: resp.data.rows[i].datetime,
                });
            }

            this.setState({
                tableData: ajaxData,
                total: resp.data.total
            })
        }, (err) => {
            console.log(err);
        });
    }

    onChange = (pageNumber, pageSize) => {
        this.pageNum = pageNumber;
        this.pageSize = pageSize;
        this.getData(pageNumber, pageSize);
    };

    onTableSelectChange = (selectedRowKeys, selectedRows) => {
        this.setState({ selectedRowKeys, selectedRows });
    };

    componentDidMount() {
        this.getData(1, 10);
    }

    render() {
        // 控制表格选择
        const rowSelection = {
            selectedRowKeys: this.state.selectedRowKeys,
            onChange: this.onTableSelectChange
        };

        return (
            <>
                <Table
                    onRow={record => {
                        return {
                            onClick: event => { console.log(record) }, // 点击行
                            onDoubleClick: event => { },
                            onContextMenu: event => { },
                            onm ouseEnter: event => { }, // 鼠标移入行
                            onm ouseLeave: event => { },
                        };
                    }}
                    rowSelection={rowSelection}
                    columns={this.getColumns()}
                    dataSource={this.state.tableData}
                    pagination={{
                        current: this.pageNum,
                        total: this.state.total,
                        pageSizeOptions: [5, 10, 20, 50, 100],
                        defaultPageSize: 10,
                        showSizeChanger: true,
                        showQuickJumper: true,
                        showTotal: (total, range) => `共 ${total} 条`,
                        onChange: this.onChange
                    }}
                    bordered
                >
                </Table>
            </>
        )
    }
}

node.js:

const express = require("express")
const fs = require("fs")
const mysql = require("mysql")
const util = require("util")
const { getNow } = require("./tool")

const app = express();

const bodyParser = require("body-parser");

app.use("/static/", express.static("./static/"));
app.use('/node_modules/', express.static('./node_modules/'));
app.engine("html", require("express-art-template"))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '12345678',
    database: 'react-ts-blog'
});

connection.connect();

// 获取所有数据
app.get("/api/blog_list", (req, res) => {
    let obj = {
        ret: false,
        total: 0,
        rows: [],
        msg: ""
    }

    const pageSize = Number(req.query.pageSize);
    const pageNumber = Number(req.query.pageNumber) - 1;

    connection.query(`SELECT * FROM blog`, (error, results, fields) => {
        if (!error) {
            obj.total = results.length;
            // 分页查询 begin
            connection.query(`SELECT * FROM blog limit ${pageNumber * pageSize}, ${pageSize}`, (error, results, fields) => {
                if (!error) {
                    obj.ret = true;
                    obj.rows = results.map((value, key) => {
                        return {
                            id: value.id,
                            title: value.title,
                            content: value.content.toString(),
                            datetime: value.datetime
                        }
                    });
                    res.header("Access-Control-Allow-Origin", "*");
                    res.type('application/json');
                    res.jsonp(obj);
                } else {
                    next(error);
                }
            })
            // 分页查询 end
        } else {
            next(error);
        }
    })
})

app.get("/404", (req, res) => {
    res.render("404.html");
})

// 配置一个全局错误处理中间件
app.use(function (err, req, res, next) {
    res.status(500).json({
        err_code: 500,
        message: err.message
    })
})

app.listen(5555, () => {
    console.log("服务启动成功......");
})

package.json:


{
  "name": "antd-demo",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@ant-design/icons": "^4.2.1",
    "@babel/core": "7.9.0",
    "@svgr/webpack": "4.3.3",
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
    "@testing-library/user-event": "^7.1.2",
    "@tinymce/tinymce-react": "^3.8.4",
    "@typescript-eslint/eslint-plugin": "^2.10.0",
    "@typescript-eslint/parser": "^2.10.0",
    "antd": "^4.7.0",
    "axios": "^0.19.2",
    "babel-eslint": "10.1.0",
    "babel-jest": "^24.9.0",
    "babel-loader": "8.1.0",
    "babel-plugin-import": "^1.13.0",
    "babel-plugin-named-asset-import": "^0.3.6",
    "babel-preset-react-app": "^9.1.2",
    "camelcase": "^5.3.1",
    "case-sensitive-paths-webpack-plugin": "2.3.0",
    "css-loader": "3.4.2",
    "dotenv": "8.2.0",
    "dotenv-expand": "5.1.0",
    "draft-js": "^0.11.7",
    "draftjs-to-html": "^0.9.1",
    "echarts": "^4.9.0",
    "echarts-for-react": "^2.0.16",
    "eslint": "^6.6.0",
    "eslint-config-react-app": "^5.2.1",
    "eslint-loader": "3.0.3",
    "eslint-plugin-flowtype": "4.6.0",
    "eslint-plugin-import": "2.20.1",
    "eslint-plugin-jsx-a11y": "6.2.3",
    "eslint-plugin-react": "7.19.0",
    "eslint-plugin-react-hooks": "^1.6.1",
    "file-loader": "4.3.0",
    "fs-extra": "^8.1.0",
    "html-to-draftjs": "^1.5.0",
    "html-webpack-plugin": "4.0.0-beta.11",
    "identity-obj-proxy": "3.0.0",
    "jest": "24.9.0",
    "jest-environment-jsdom-fourteen": "1.0.1",
    "jest-resolve": "24.9.0",
    "jest-watch-typeahead": "0.4.2",
    "mini-css-extract-plugin": "0.9.0",
    "optimize-css-assets-webpack-plugin": "5.0.3",
    "pnp-webpack-plugin": "1.6.4",
    "postcss-flexbugs-fixes": "4.1.0",
    "postcss-loader": "3.0.0",
    "postcss-normalize": "8.0.1",
    "postcss-preset-env": "6.7.0",
    "postcss-safe-parser": "4.0.1",
    "qs": "^6.9.4",
    "react": "^16.13.1",
    "react-app-polyfill": "^1.0.6",
    "react-dev-utils": "^10.2.1",
    "react-dom": "^16.13.1",
    "react-draft-wysiwyg": "^1.14.5",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.0",
    "react-transition-group": "^4.4.1",
    "redux": "^4.0.5",
    "resolve": "1.15.0",
    "resolve-url-loader": "3.1.1",
    "sass-loader": "8.0.2",
    "semver": "6.3.0",
    "style-loader": "0.23.1",
    "terser-webpack-plugin": "2.3.5",
    "ts-pnp": "1.1.6",
    "url-loader": "2.3.0",
    "webpack": "4.42.0",
    "webpack-dev-server": "3.10.3",
    "webpack-manifest-plugin": "2.2.0",
    "workbox-webpack-plugin": "4.3.1"
  },
  "scripts": {
    "start": "node scripts/start.js",
    "build": "node scripts/build.js",
    "test": "node scripts/test.js"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "proxy": "http://localhost:9999",
  "homepage": ".",
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "jest": {
    "roots": [
      "<rootDir>/src"
    ],
    "collectCoverageFrom": [
      "src/**/*.{js,jsx,ts,tsx}",
      "!src/**/*.d.ts"
    ],
    "setupFiles": [
      "react-app-polyfill/jsdom"
    ],
    "setupFilesAfterEnv": [
      "<rootDir>/src/setupTests.js"
    ],
    "testMatch": [
      "<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}",
      "<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"
    ],
    "testEnvironment": "jest-environment-jsdom-fourteen",
    "transform": {
      "^.+\\.(js|jsx|ts|tsx)$": "<rootDir>/node_modules/babel-jest",
      "^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
      "^(?!.*\\.(js|jsx|ts|tsx|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
    },
    "transformIgnorePatterns": [
      "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$",
      "^.+\\.module\\.(css|sass|scss)$"
    ],
    "modulePaths": [],
    "moduleNameMapper": {
      "^react-native$": "react-native-web",
      "^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy"
    },
    "moduleFileExtensions": [
      "web.js",
      "js",
      "web.ts",
      "ts",
      "web.tsx",
      "tsx",
      "json",
      "web.jsx",
      "jsx",
      "node"
    ],
    "watchPlugins": [
      "jest-watch-typeahead/filename",
      "jest-watch-typeahead/testname"
    ]
  },
  "devDependencies": {
    "less": "^3.12.2",
    "less-loader": "^6.2.0"
  }
}

sql:

/*
Navicat MySQL Data Transfer

Source Server         : node
Source Server Version : 50717
Source Host           : localhost:3306
Source Database       : react-ts-blog

Target Server Type    : MYSQL
Target Server Version : 50717
File Encoding         : 65001

Date: 2021-01-29 15:33:35
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for blog
-- ----------------------------
DROP TABLE IF EXISTS `blog`;
CREATE TABLE `blog` (
  `id` int(16) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `content` longblob,
  `datetime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of blog
-- ----------------------------
INSERT INTO `blog` VALUES ('1', '情牵游子——把人民放在心中最高位置', 0xE59CA8E696B0E586A0E882BAE7828EE796ABE68385E585A8E79083E89493E5BBB6E79A84E58DB1E68385E4B88BEFBC8CE8BAABE59CA8E5BC82E59BBDE4BB96E4B9A1E79A84E5ADA6E5AD90E4BEA8E8839EE7949FE591BDE581A5E5BAB7E58F97E588B0E5A881E88381E38082E4B9A0E8BF91E5B9B3E680BBE4B9A6E8AEB0E7ACACE4B880E697B6E997B4E4BD9CE587BAE983A8E7BDB2EFBC8CE8A681E6B182E58AA0E5BCBAE5AFB9E5A283E5A496E68891E59BBDE585ACE6B091E796ABE68385E998B2E68EA7E79A84E68C87E5AFBCE5928CE694AFE68C81EFBC8CE5819AE5A5BDE59084E9A1B9E5B7A5E4BD9CEFBC8CE4BF9DE68AA4E4BB96E4BBACE79A84E7949FE591BDE5AE89E585A8E5928CE8BAABE4BD93E581A5E5BAB7E38082, '2021-01-07 16:55:57');
INSERT INTO `blog` VALUES ('20', '新华社:扭曲“奋斗观”当休矣 996等所谓“奋斗”绝不是福报', 0xE68BBCE6908FE4B88DE698AFE68BBCE591BDEFBC8CE58BA4E58AB3E4B88DE883BDE8BF87E58AB3EFBC8CE6BCA0E8A786E58AB3E58AA8E88085E69D83E79B8AE38081E9808FE694AFE58AB3E58AA8E88085E581A5E5BAB7E79A84E68980E8B093E2809CE5A58BE69697E2809DEFBC8CE7BB9DE4B88DE698AFE4BB80E4B988E2809CE7A68FE68AA5E2809DEFBC8CE8BF99E697A2E8BF9DE58F8DE58AB3E58AA8E6B395EFBC8CE69BB4E8838CE7A6BBE5A58BE69697E7B2BEE7A59EEFBC8CE585B6E7A4BEE4BC9AE58DB1E5AEB3E680A7E4B88DE58FAFE5B08FE79C8BE38082E59BA0E8808CEFBC8CE697A2E8A681E6B2BBE79086E795B8E5BDA2E58AA0E78FADE78EB0E8B1A1EFBC8CE69BB4E5BA94E6ADA3E69CACE6B885E6BA90EFBC8CE5A4A7E58A9BE7A0B4E999A4E585B6E8838CE5908EE79A84E689ADE69BB2E4BBB7E580BCE8A782EFBC8CE58887E5AE9EE5BC98E689ACE5A58BE69697E7B2BEE7A59EEFBC8CE8AEA9E5B9BFE5A4A7E5A58BE69697E88085E7A8B3E581A5E5898DE8A18CE380820A0AE59C86E6A2A6E9A1BBE68BBCE6908FEFBC8CE68890E58A9FE99DA0E5A58BE69697E38082E4BB8AE5A4A9E79A84E4B8ADE59BBDEFBC8CE697A0E8AEBAE698AFE5AE9EE78EB0E59BBDE5AEB6E58F91E5B195E8939DE59BBEEFBC8CE8BF98E698AFE68890E5B0B1E4B8AAE4BABAE6A2A6E683B3EFBC8CE983BDE69BB4E58AA0E99C80E8A681E889B0E88BA6E5A58BE69697E38081E4B88DE68788E5A58BE69697EFBC8CE983BDE69BB4E58AA0E591BCE594A4E695A2E997AFE38081E695A2E5B9B2E38081E695A2E68BBCE79A84E7B2BEE6B094E7A59EE38082E8808CE79C9FE6ADA3E79A84E5A58BE69697EFBC8CE698AFE5BF83E68080E6A2A6E683B3E5B9B6E4B8BAE4B98BE4BB98E587BAE8BE9BE58BA4E6B197E6B0B4EFBC8CE698AFE59FBAE4BA8EE5AFB9E4BA8BE4B89AE79A84E783ADE788B1E5928CE8B4A3E4BBBBE5BF83E8808CE58B87E4BA8EE799BBE69480EFBC8CE698AFE58AB3E58AA8E88085E5889BE980A0E4BBB7E580BCE5B9B6E4BAABE58F97E58AB3E58AA8E68890E69E9CE79A84E8BF87E7A88BE38082E4B880E4B8AAE68B85E5BD93E7A4BEE4BC9AE8B4A3E4BBBBE79A84E4BC81E4B89AEFBC8CE697A2E883BDE59CA8E6BF80E78388E7AB9EE4BA89E4B8ADE5AE9EE78EB0E4B89AE7BBA9E4B88AE689ACEFBC8CE69BB4E883BDE59CA8E585B1E4BAABE58F91E5B195E4B8ADE8AEA9E59198E5B7A5E79A84E5B9B8E7A68FE68C87E695B0E68C81E7BBADE4B88AE58D87E380820A0AE4BABAE698AFE69C80E58FAFE5AE9DE8B4B5E79A84E38082E4B880E58887E79A84E5A58BE69697EFBC8CE983BDE698AFE4B8BAE4BA86E8AEA9E4BABAE4BBACE8BF87E4B88AE69BB4E5A5BDE7949FE6B4BBE38081E4BF83E8BF9BE4BABAE79A84E585A8E99DA2E58F91E5B195E38082E4BBA5E4BABAE4B8BAE69CACEFBC8CE698AFE5A58BE69697E5A78BE7BB88E4B88DE58F98E79A84E4BBB7E580BCE58F96E59091E38082E4BB8EE8BF99E4B8AAE6848FE4B989E4B88AE8AFB4EFBC8CE4BF9DE68AA4E58AB3E58AA8E88085E59088E6B395E69D83E79B8AEFBC8CE4B88DE696ADE5A29EE5BCBAE58AB3E58AA8E88085E79A84E88EB7E5BE97E6849FE38081E5B9B8E7A68FE6849FE38081E5AE89E585A8E6849FEFBC8CE698AFE5BC98E689ACE5A58BE69697E7B2BEE7A59EE79A84E5BA94E69C89E4B98BE4B989E38082E99288E5AFB9E7A4BEE4BC9AE58F8DE698A0E5BCBAE78388E79A84E4BBA5E5A58BE69697E4B8BAE5B98CE5AD90EFBC8CE8A18CE7ABADE6B3BDE8808CE6B894E79A84E795B8E5BDA2E58AA0E78FADE997AEE9A298EFBC8CE5BF85E9A1BBE4BE9DE6B395E58AA0E5BCBAE79B91E7AEA1EFBC8CE695A2E4BA8EE58AA8E79C9FE7A2B0E7A1ACEFBC8CE8AEA9E58AB3E58AA8E6B395E7AD89E6B395E5BE8BE6B395E8A784E995BFE587BAE2809CE78999E9BDBFE2809DEFBC8CE4B8BAE58AB3E58AA8E88085E68F90E4BE9BE69BB4E58AA0E59D9AE5AE9EE69C89E58A9BE79A84E4BF9DE99A9CE5928CE694AFE68C81E38082E59198E5B7A5E581A5E5BAB7E5B7A5E4BD9CEFBC8CE4BC81E4B89AE581A5E5BAB7E58F91E5B195EFBC8CE8BF99E6898DE698AFE5A58BE69697E69CACE69DA5E79A84E6A0B7E5AD90EFBC8CE4B99FE698AFE58F91E5B195E8AFA5E69C89E79A84E6B8A9E5BAA6E38082, '2021-01-07 17:03:05');
INSERT INTO `blog` VALUES ('33', '百度宣布重大决定,龙头股秒板,超5万手大单封死涨停,概念股被爆买!', 0x3C703E3C7374726F6E673EE6B1BDE8BDA6E8A18CE4B89AE4B88DE696ADE4BCA0E69DA5E5A4A7E6B688E681AFEFBC8C41E882A1E79BB8E585B3E585ACE58FB8E882A1E4BBB7E6B3A2E58AA8E5A4A7E380823C2F7374726F6E673E3C2F703E0A3C703E3C2F703E0A3C703E31E69C883131E697A5EFBC8CE799BEE5BAA6E7AA81E784B6E5AE98E5AEA3E980A0E8BDA6EFBC8CE5AEA3E5B883E6ADA3E5BC8FE7BB84E5BBBAE4B880E5AEB6E699BAE883BDE6B1BDE8BDA6E585ACE58FB8EFBC8CE4BBA5E695B4E8BDA6E588B6E980A0E59586E79A84E8BAABE4BBBDE8BF9BE5869BE6B1BDE8BDA6E8A18CE4B89AE38082E799BEE5BAA6E6B1BDE8BDA6E585ACE58FB8E5B086E78BACE7AB8BE4BA8EE6AF8DE585ACE58FB8E4BD93E7B3BBEFBC8CE4BF9DE68C81E887AAE4B8BBE8BF90E890A5EFBC8CE5B086E4BABAE5B7A5E699BAE883BDE3808141706F6C6C6FE887AAE58AA8E9A9BEE9A9B6E38081E5B08FE5BAA6E8BDA6E8BDBDE38081E799BEE5BAA6E59CB0E59BBEE7AD89E6A0B8E5BF83E68A80E69CAFE585A8E99DA2E8B58BE883BDE6B1BDE8BDA6E585ACE58FB8EFBC8CE694AFE68C81E585B6E5BFABE9809FE68890E995BFE380823C2F703E0A, '2021-01-11 16:21:46');
INSERT INTO `blog` VALUES ('35', '菱歌一曲踏浪来——在红船起航地感受美好中国', 0x3C703EE8BF99E9878CE698AFE4B8ADE59BBDE99DA9E591BDE7BAA2E888B9E8B5B7E888AAE59CB0EFBC8CE5A682E4BB8AE698AFE9AB98E6B0B4E5B9B3E59D87E8A1A1E58F91E5B195E58588E8A18CE59CB0E380823C2F703E0A3C703EE7A9BAE4B8ADE4BFAFE79EB0E59889E585B4E58D97E6B996E58F8AE59889E585B4E59F8EE58CBAEFBC88E697A0E4BABAE69CBAE785A7E78987EFBC8C32303230E5B9B43130E69C883237E697A5E69184EFBC89E38082E696B0E58D8EE7A4BEE8AEB0E8808520E5BE90E698B120E691843C2F703E0A3C703EE8BF99E9878CE698AFE4B8B0E9A5B6E7A780E7BE8EE79A84E9B1BCE7B1B3E4B98BE4B9A1EFBC8CE5A682E4BB8AE698AFE58AA8E883BDE6BE8EE6B983E79A84E7A791E5889BE9AB98E59CB0E380823C2F703E0A3C703EE8BF99E9878CEFBC8CE698AFE6B599E6B19FE59889E585B4E380823C2F703E0A3C703EE59889E585B4E5B882E6B5B7E79B90E58EBFE7BBBFE883BDE78EAFE4BF9DE9A1B9E79BAEE59BADE58CBAE699AFE8A782EFBC8832303230E5B9B43132E69C883137E697A5E69184EFBC89E38082E696B0E58D8EE7A4BEE58F91EFBC88E6B19FE6B18920E69184EFBC893C2F703E0A3C703EE4B880E799BEE5B9B4E5898DEFBC8CE4B880E58FB6E7BAA2E888B9E4BB8EE59889E585B4E58D97E6B996E9A9B6E587BAEFBC8CE5BC95E9A286E4B880E4B8AAE6B091E6978FE4B9A6E58699E69591E4BAA1E59BBEE5AD98E79A84E5A3AEE4B8BDE58FB2E8AF97EFBC9BE4B880E799BEE5B9B4E5908EEFBC8CE58D97E6B996E7A780E6B0B4E4BE9DE697A7EFBC8CE7BAA2E889B2E59C9FE59CB0E68DA2E4BA86E4BABAE997B4E380823C2F703E0A3C703E3C7374726F6E673EE59D87E8A1A1E58F91E5B195E58588E8A18CE59CB03C2F7374726F6E673E3C2F703E0A3C703EE59889E59684E58EBFE59889E59684E5A4A7E98193E4B88EE4B896E7BAAAE5A4A7E98193E8B7AFE58FA3E699AFE8A782EFBC88E697A0E4BABAE69CBAE785A7E78987EFBC8C32303230E5B9B43132E69C883136E697A5E69184EFBC89E38082E696B0E58D8EE7A4BEE58F91EFBC88E6B19FE6B18920E69184EFBC893C2F703E0A3C703EE5A49AE5B9B4E69DA5EFBC8CE59889E585B4E59F8EE4B9A1E5B185E6B091E694B6E585A5E59CA8E6B599E6B19FE68B94E5A4B4E7ADB9EFBC9AE5869CE69D91E5B185E6B091E4BABAE59D87E58FAFE694AFE9858DE694B6E585A5E8BF9EE7BBAD3136E5B9B4E5B185E585A8E79C81E7ACACE4B880EFBC9B32303230E5B9B4E5898DE4B889E5ADA3E5BAA6EFBC8CE59F8EE4B9A1E5B185E6B091E694B6E585A5E6AF94E8BF9BE4B880E6ADA5E7BCA9E5B08FE588B0312E3439EFBC9A31E380823C2F703E0A3C703EE695B0E5AD97E8838CE5908EEFBC8CE698AFE9AB98E6B0B4E5B9B3E59D87E8A1A1E58F91E5B195E79A84E7BE8EE5A5BDE59BBEE699AFE380823C2F703E0A3C703EE9AB98E6B0B4E5B9B3E59D87E8A1A1EFBC8CE698AFE7BBBFE6B0B4E99D92E5B1B1E38081E699AFE7BE8EE4BABAE5928CE38081E8AF97E6848FE6A096E5B185E380823C2F703E0A3C703EE59889E585B4E7A780E6B4B2E58CBAE6B2B9E8BDA6E6B8AFE99587E8839CE4B8B0E69D91E59D90E890BDE4BA8EE993B6E69D8FE5A4A9E9B985E6B996E4B88EE8A5BFE58D83E4BAA9E88DA1E4B98BE997B4EFBC8CE4BFAEE697A7E5A682E697A7E79A84E6A088E98193E4B88EE78EB0E4BBA3E889BAE69CAFE5A299E7BB98E79BB8E698A0E68890E8B6A3EFBC8CE5B4ADE696B0E79A84E6B091E5B185E58685E7949FE6B4BBE8AEBEE696BDE4B880E5BA94E4BFB1E585A8E38082E586ACE697A5E69A96E998B3E785A7E8BF9BE78EBBE79283E7AA97EFBC8CE4BABAE4BBACE79BB8E8819AE8AF9DE5AEB6E5B8B8E380823C2F703E0A3C703EE7949FE6B4BBE8B68AE69DA5E8B68AE5A5BDEFBC8CE6898DE69C89E4BA86E69BB4E5A49AE2809CE5B9B8E7A68FE585A5E794BBE2809DE79A84E7BE8EE699AFE38082E5A4A7E8BF90E6B2B3E4B88AE8B59BE9BE99E8889FEFBC8CE88FB1E6AD8CE4B880E69BB2E8B88FE6B5AAE69DA5E28094E28094E8BF99E698AFE4BBA5E2809CE59BBDE6B3B0E6B091E5AE89E2809DE4B8BAE4B8BBE9A298E79A84E7A780E6B4B2E58CBAE6B2B9E8BDA6E6B8AFE99587E5869CE6B091E794BBEFBC8CE4BD9CE88085E698AFE6B599E6B19FE79C81E5869CE6B091E794BBE99D9EE789A9E8B4A8E69687E58C96E98197E4BAA7E4BCA0E689BFE4BABAE5BCA0E98791E6B389E38082E4BB96E8AFB4EFBC9AE2809CE5AEB6E59BADE38081E794B0E9878EE38081E4B9A1E68385EFBC8CE698AFE68891E4BBACE8A1A8E8BEBEE79A84E6B0B8E68192E4B8BBE9A298E38082E68891E79A84E5889BE4BD9CE781B5E6849FE680BBE698AFE69DA5E887AAE4BA8EE5AEB6E4B9A1E79A84E697A5E696B0E69C88E5BC82E38082E2809D3C2F703E0A, '2021-01-12 11:08:45');
INSERT INTO `blog` VALUES ('47', '弯道超车的机会来了!中国这些核心技术或将突破', 0x3C703EE4BBBBE6ADA3E99D9EE8A1A8E7A4BAEFBC8CE68891E59BBDE79A84E59FBAE7A180E5B7A5E4B89AE8BF98E698AFE4B88DE5BCBAE79A84EFBC8CE5B08FE5B08FE4B880E6BBB4E883B6EFBC8CE5B0B1E588B6E7BAA6E4B880E4B8AAE59BBDE5AEB6E79A84E69585E4BA8BEFBC8CE68891E4BBACE5B7B2E7BB8FE79C8BE588B0E4BA86EFBC8CE8BF99E698AFE58886E5AD90E5B7A5E7A88BEFBC8CE698AFE9AB98E7A791E68A80E4B8ADE79A84E9AB98E7A791E68A80E38082E8808CE8BF99E587A0E58D83E7A78DE883B6E38081E7A094E7A3A8E58982E38081E789B9E7A78DE6B094E4BD93E280A6E280A6E983BDE698AFE9AB98E7A791E68A80E4B8ADE79A84E9AB98E7A791E68A80EFBC8CE68891E59BBDE78EB0E59CA8E8BF98E59FBAE69CACE8BEBEE4B88DE588B0EFBC8CE5BE88E5A49AE7A78DE68A80E69CAFE4B880E5B9B4E79A84E99C80E6B182E9878FE58FAAE69C89E587A0E58D83E4B887E7BE8EE58583E38081E587A0E799BEE4B887E7BE8EE58583E7949AE887B3E69BB4E5B091EFBC8CE8AF95E79C8BE6B3A1E6B2ABE7BB8FE6B58EE4B88BE69C89E587A0E4B8AAE585ACE58FB8E882AFE5B9B2E8BF99E7A78DE4BA8BE38082E7BCBAE4B880E7A78DE5B0B1E4BC9AE58DA1E4BA86E4B880E4B8AAE59BBDE5AEB6E79A84E88496E5AD90E380823C2F703E0A, '2021-01-22 11:17:59');
INSERT INTO `blog` VALUES ('50', '如何深化新时代教育督导*机制改革 湖南打算这样干', 0x3C703EE697A5E5898DEFBC8CE79C81E5A794E58A9EE585ACE58E85E38081E79C81E694BFE5BA9CE58A9EE585ACE58E85E88194E59088E58DB0E58F91E3808AE585B3E4BA8EE6B7B1E58C96E696B0E697B6E4BBA3E69599E882B2E79DA3E5AFBCE4BD93E588B6E69CBAE588B6E694B9E99DA9E79A84E5AE9EE696BDE6848FE8A781E3808BEFBC88E7AE80E7A7B0E3808AE5AE9EE696BDE6848FE8A781E3808BEFBC89EFBC8CE5B9B6E58F91E587BAE9809AE79FA5EFBC8CE8A681E6B182E59084E59CB0E59084E983A8E997A8E7BB93E59088E5AE9EE99985E8AEA4E79C9FE8B4AFE5BDBBE890BDE5AE9EE38082E3808AE5AE9EE696BDE6848FE8A781E3808BE585A8E69687E5A682E4B88BEFBC9A3C2F703E0A3C703EE4B8BAE4BA86E6B7B1E585A5E8B4AFE5BDBBE4B9A0E8BF91E5B9B3E696B0E697B6E4BBA3E4B8ADE59BBDE789B9E889B2E7A4BEE4BC9AE4B8BBE4B989E6809DE683B3EFBC8CE585A8E99DA2E8B4AFE5BDBBE5859AE79A84E58D81E4B99DE5A4A7E5928CE58D81E4B99DE5B18AE4BA8CE4B8ADE38081E4B889E4B8ADE38081E59B9BE4B8ADE38081E4BA94E4B8ADE585A8E4BC9AE4BBA5E58F8AE585A8E59BBDE69599E882B2E5A4A7E4BC9AE7B2BEE7A59EEFBC8CE7B4A7E7B4A7E59BB4E7BB95E7A1AEE4BF9DE69599E882B2E4BC98E58588E58F91E5B195E38081E890BDE5AE9EE7AB8BE5BEB7E6A091E4BABAE6A0B9E69CACE4BBBBE58AA1EFBC8CE6B7B1E58C96E696B0E697B6E4BBA3E69599E882B2E79DA3E5AFBCE4BD93E588B6E69CBAE588B6E694B9E99DA9EFBC8CE58585E58886E58F91E68CA5E69599E882B2E79DA3E5AFBCE4BD9CE794A8EFBC8CE4B88DE696ADE68F90E9AB98E69599E882B2E79DA3E5AFBCE8B4A8E9878FE5928CE6B0B4E5B9B3EFBC8CE4B8BAE5A4A7E58A9BE5AE9EE696BDE2809CE4B889E9AB98E59B9BE696B0E2809DE68898E795A5E38081E5A58BE58A9BE5BBBAE8AEBEE78EB0E4BBA3E58C96E696B0E6B996E58D97E4BD9CE587BAE8B4A1E78CAEEFBC8CE6A0B9E68DAEE4B8ADE585B1E4B8ADE5A4AEE58A9EE585ACE58E85E38081E59BBDE58AA1E999A2E58A9EE585ACE58E85E58DB0E58F91E79A84E3808AE585B3E4BA8EE6B7B1E58C96E696B0E697B6E4BBA3E69599E882B2E79DA3E5AFBCE4BD93E588B6E69CBAE588B6E694B9E99DA9E79A84E6848FE8A781E3808BEFBC8CE7BB93E59088E68891E79C81E5AE9EE99985EFBC8CE78EB0E68F90E587BAE5A682E4B88BE5AE9EE696BDE6848FE8A781E380823C2F703E0A, '2021-01-22 11:21:11');
INSERT INTO `blog` VALUES ('54', '传输量50倍于5G?华为6G技术已领先世界 欧洲追赶中美', 0x3C703EE68DAEE6B395E59BBDE3808AE59B9EE5A3B0E68AA5E3808BE7BD91E7AB9931E69C8836E697A5E68AA5E98193EFBC8CE59CA8E6B395E59BBDE68EA8E587BA3547E4BB85E8BF87E4BA86E4B880E4B8AAE69C88E4B98BE5908EEFBC8CE6ACA7E79B9FE5B0B1E5B7B2E59CA8E4B8BAE69CAAE69DA5E79A843647E6A087E58786E5819AE58786E5A487E38082E6ACA7E79B9FE6ADA4E795AAE58AAAE58A9BE4BBA531E69C8831E697A5E68EA8E587BA486578612D58E9A1B9E79BAEE4BD9CE4B8BAE8B1A1E5BE81E680A7E5BC80E7ABAFE38082E8BF99E4B880E591A8E69C9FE4B8BAE4B8A4E5B9B4E58D8AE79A84E5A4A7E59E8BE7A791E7A094E9A1B9E79BAEEFBC8CE697A8E59CA8E4B8BA32303330E5B9B4E79A843647E7BD91E7BB9CE5819AE58786E5A487E380823C2F703E0A3C703EE68AA5E98193E4BB8BE7BB8DEFBC8CE8AFA5E9A1B9E79BAEE794B1E8AFBAE59FBAE4BA9AE789B5E5A4B4EFBC8CE59CA8E68A80E69CAFE4B88AE788B1E7AB8BE4BFA1E4B99FE983A8E58886E58F82E4B88EEFBC8CE6B187E99B86E4BA863235E5AEB6E6ACA7E6B4B2E4BC81E4B89AE5928CE9AB98E6A0A1E38082E6B395E59BBDE696B9E99DA2E69C89E794B5E4BFA1E8BF90E890A5E59586E5A5A5E69C97E68DB7EFBC884F72616E6765EFBC89E38081E6BA90E8AEAFE585ACE58FB8E3808142636F6DE7A094E7A9B6E68980E7AD89E69CBAE69E84E58F82E4B88EE38082E4BD9CE4B8BAE6848FE5A4A7E588A9E7A7BBE58AA8E794B5E4BFA1E99B86E59BA2E4BCA0E7BB9FE59088E4BD9CE4BC99E4BCB4E79A84E8A5BFE997A8E5AD90EFBC8CE4BBA5E58F8AE8A5BFE78FADE78999E794B5E4BFA1E585ACE58FB8E4B99FE58F82E4B88EE4BA86E8AFA5E9A1B9E79BAEE38082E7949AE887B3E8BF9EE7BE8EE59BBDE4B99FE58F82E4B88EE4BA86E8BF9BE69DA5EFBC8CE4B88DE8BF87E58FAAE69C89E88BB1E789B9E5B094E585ACE58FB8E4B880E5AEB6E4BC81E4B89AE380823C2F703E0A3C703EE5A5A5E69C97E68DB7E585ACE58FB8E8B49FE8B4A3E7A7BBE58AA8E7BD91E7BB9CE79A84E589AFE680BBE8A381E998BFE5B094E8AFBAC2B7E4B887E5B895E9878CE8A7A3E9878AE8AFB4EFBC9AE2809C486578612D58E698AFE6ACA7E79B9FE59CA83647E9A286E59F9FE79A84E9A696E4B8AAE68C87E5BC95E680A7E9A1B9E79BAEEFBC8CE79BAEE6A087E698AFE7A1AEE5AE9AE4B880E4B8AAE585B1E5908CE79A84E8B7AFE7BABFE59BBEEFBC8CE4BBA5E58F8AE68EA2E8AEA8E68A80E69CAFE4B88AE593AAE4BA9BE58FAFE8A18CE38081E593AAE4BA9BE4B88DE58FAFE8A18CE38082E2809D3C2F703E0A3C703E486578612D58E9A1B9E79BAEE5B19EE4BA8EE3808AE6ACA7E6B4B232303230E8BF9CE699AFE8A784E58892E3808BE79A84E88C83E795B4EFBC8CE8BF99E698AFE6ACA7E79B9FE4B880E4B8AAE5A4A7E59E8BE7A791E7A094E5928CE5889BE696B0E8A784E58892EFBC88E8AEA1E5889237E5B9B4E58685E9A1B9E79BAEE68A95E8B584383030E4BABFE6ACA7E58583EFBC89E38082486578612D58E698AFE6ACA7E79B9FE4B8BAE2809CE5908E3547E2809DE697B6E4BBA3E98089E5AE9AE79A8435E4B8AAE9A1B9E79BAEE4B98BE4B880EFBC8CE69BBEE69C893831E4B8AAE9A1B9E79BAEE58F82E58AA0E6ACA7E79B9FE79A84E68B9BE6A087E38082486578612D58E9A1B9E79BAEE79A84E9A284E7AE97E5B09AE69CAAE585ACE5BC80E380823C2F703E0A3C703EE59CA83647E9A286E59F9FE6ACA7E79B9FE4B88DE8BF87E698AFE5889AE5889AE8B5B7E6ADA5EFBC8CE58FAAE698AFE5BBBAE7AB8BE4BA86E4B880E4B8AA3647E79A84E2809CE7B297E795A5E79C8BE6B395E2809DEFBC8CE7A1AEE5AE9AE4BA86E58C85E68BACE78EAFE5A283E5928CE699BAE883BDE88194E7BD91E7AD8936E4B8AAE7A094E7A9B6E9A286E59F9FE38082E4B887E5B895E9878CE8A1A8E7A4BAEFBC9AE2809C3547E79A84E8AEBEE8AEA1E5838FE4B880E4B8AAE4B889E8A792E5BDA2EFBC8CE69C8933E5A4A7E4B8BBE8A681E79086E5BFB5EFBC9AE9AB98E9809FE78E87E38081E69BB4E5A49AE9878DE8A681E5BA94E794A8E38081E4B887E789A9E4BA92E88194E38082E8808C3647E69BB4E5838FE698AFE4B880E4B8AAE585ADE8BEB9E5BDA2EFBC8CE8AEBEE8AEA1E79086E5BFB5E698AFE59CA836E4B8AAE696B9E59091E4B88AE69BB4E5A49AE6BBA1E8B6B3E68891E4BBACE79A84E99C80E8A681E38082E2809D3C2F703E0A3C703EE8AFBAE59FBAE4BA9AE8B49DE5B094E5AE9EE9AA8CE5AEA4E4BABAE59198E8A7A3E9878AE8AFB4EFBC9AE2809C3647E99C80E8A681E99C80E8A681E59CA8E7A7BBE58AA8E7BD91E7BB9CE8BF9EE68EA5E696B9E5BC8FE4B88AE8BF9BE8A18CE5BDBBE5BA95E694B9E58F98EFBC8CE99C80E8A681E7BBBCE59088E58D8FE8B083E5BE88E5A49AE58F82E695B0E380823647E7BD91E7BB9CE5B086E6BBA1E8B6B3E695B0E68DAEE4BCA0E8BE93E79A84E5A4A7E5B985E68F90E58D87E5928CE88194E7BD91E789A9E4BD93E79A84E78886E782B8E5BC8FE5A29EE995BFEFBC8CE4BD86E698AFE4B99FE5BA94E8AFA5E59CA8E883BDE6BA90E4BDBFE794A8E69588E78E87E38081E5AE89E585A8E38081E8A686E79B96E78E87E58F8AE7BBB4E68AA4E7AD89E696B9E99DA2E8A1A8E78EB0E69BB4E587BAE889B2E38082E2809D3C2F703E0A3C703EE59CA83547E79A84E4BDBFE794A8E5928CE2809CE59586E4B89AE6A8A1E5BC8FE2809DE5B09AE69CAAE58786E7A1AEE5AE9AE4B989E79A84E68385E586B5E4B88BE5B0B1E68EA8E587BA486578612D58EFBC8CE6ACA7E6B4B2E698AFE5B88CE69C9BE981BFE5858DE8BF87E4BA8EE890BDE5908EE4BA8EE4B8ADE59BBDE5928CE7BE8EE59BBDE38082E4B8ADE7BE8EE4B8A4E4B8AAE5A4A7E59BBD32303139E5B9B4E78E87E58588E68EA8E587BAE4BA863547EFBC8CE6AF94E6ACA7E6B4B2E697A9E4BA86E4B880E5B9B4EFBC8CE8808CE4B894E983BDE697A9E5B7B2E5BC80E5A78BE7A094E58F913647E68A80E69CAFE380823C2F703E0A3C703EE4BE8BE5A682EFBC8CE58C97E4BAACE58EBBE5B9B43131E69C88E59091E5A4AAE7A9BAE58F91E5B084E4BA86E4B880E9A2973730E585ACE696A4E9878DE79A84E58DABE6989FEFBC8CE4BBA5E8BF9BE8A18C3647E68980E99C80E8A681E79A84E5A4AAE8B5ABE585B9E6B3A2E8AF95E9AA8CEFBC8CE8BF99E698AFE585A8E79083E9A696E6ACA1E3808232303139E5B9B4EFBC8CE7BE8EE59BBDE794B5E4BFA1E79B91E7AEA1E69CBAE69E84E4B99FE5BC80E694BEE4BA86E5A4AAE8B5ABE585B9E6B3A2E79A84E9A291E78E87E4BBA5E8BF9BE8A18CE8AF95E9AA8CE380823C2F703E0A3C703EE5A4AAE8B5ABE585B9E6B3A2E698AFE5AE9EE78EB03647E68A80E69CAFE79A84E585B3E994AEEFBC8CE9A291E78E87E5A4A7E4BA8E313130E58D83E58586E8B5ABEFBC8CE58FAFE4BBA5E68F90E4BE9BE69BB4E9AB98E79A84E4BCA0E8BE93E9809FE78E87E38082E4B889E6989FE585ACE58FB8E68C87E587BAEFBC8CE4BE9DE99DA0E5A4AAE8B5ABE585B9E6B3A2EFBC8C3647E4BCA0E8BE93E5B3B0E580BCE58FAFE4BBA5E8BEBEE588B0E6AF8FE7A79231303030E58D83E58586E6AF94E789B9EFBC8CE8BF99E79BB8E5BD93E4BA8E3547E4BCA0E8BE93E9878FE79A843530E5808DE38082E6ADA4E5A496EFBC8CE7BD91E7BB9CE79A84E58F8DE5BA94E9809FE5BAA6E4B99FE58FAAE69C893547E79A84E58D81E58886E4B98BE4B880EFBC8CE5BBB6E697B6E58FAFE4BBA5E7BCA9E79FADE887B3302E31E6AFABE7A792E38082E8BF99E58FAFE4BBA5E6BBA1E8B6B3E5BE88E5A49AE9878DE5A4A7E5BA94E794A8EFBC8CE5B0A4E585B6E698AFE6B1BDE8BDA6E887AAE58AA8E9A9BEE9A9B6E5928CE8BF9CE7A88BE58CBBE79697E380823C2F703E0A3C703EE999A4E4BA86E59BBDE99985E68A80E69CAFE7AB9EE4BA89E5A496EFBC8C3647E59CA8E4BAA7E4B89AE9A286E59F9FE4B99FE585B7E69C89E58D81E58886E585B3E994AEE38082E59CA8E794B5E4BFA1E9A286E59F9FEFBC8CE7A7BBE58AA8E794B5E8AF9DE6AF8F3130E5B9B4E69BB4E696B0E4B880E4BBA3E38082E5B882E59CBAE4B88AE4BB85E69C89E79A8432E5AEB6E6ACA7E6B4B2E794B5E4BFA1E8AEBEE5A487E4BE9BE5BA94E59586E28094E28094E8AFBAE59FBAE4BA9AE5928CE788B1E7AB8BE4BFA1EFBC8CE5BD93E784B6E5B88CE69C9BE883BDE8B5B0E59CA8E5898DE6B2BFE4BBA5E69C9FE88EB7E5BE97E68A80E69CAFE9A286E58588E59CB0E4BD8DEFBC8CE4B99FE5B88CE69C9BE883BDE5B086E69BB4E5A49AE8AEBEE5A487E58D96E7BB99E585A8E79083E79A84E794B5E4BFA1E8BF90E890A5E59586E380823C2F703E0A3C703EE784B6E8808CE8BF98E5BE97E7AD89E5BE853647E6A087E58786E79A84E7A1AEE7AB8BEFBC8CE8BF99E5B086E4BC9AE698AFE4B880E4B8AAE59CA8E4B889E59B9BE5B9B4E58685E5BC80E5A78BE79A84E38081E59BBDE99985E88C83E59BB4E58685E79A84E6BCABE995BFE68A80E69CAF2DE5A496E4BAA4E8BF87E7A88BE38082E59BBDE99985E794B5E4BFA1E88194E79B9FE4BABAE5A3ABE8A1A8E7A4BAEFBC9AE2809CE59BBDE99985E794B5E4BFA1E88194E79B9FE79BAEE5898DE8BF98E6B2A1E69C89E5BC80E5A78BE7A094E7A9B63647E6A087E58786E38082E2809D3C2F703E0A3C703EE6ADA4E5A496EFBC8CE696B0E4B880E4BBA3E6898BE69CBAE4B99FE8AEB8E4BC9AE694B9E58F98E6A0BCE5B180E38082E4BE8BE5A682EFBC8C3547E68A80E69CAFE8AEA9E788B1E7AB8BE4BFA1E9878DE59B9EE68A80E69CAFE5898DE6B2BFE38082E59CA832303130E5B9B4E5898DE5908EEFBC8CE7A7BBE58AA8E9809AE4BFA1E68A80E69CAFE590913447E8BF87E6B8A1E697B6EFBC8CE788B1E7AB8BE4BFA1E69BBEE8A2ABE58D8EE4B8BAE5898AE5BCB1E38082E5908CE6A0B7EFBC8CE8AFBAE59FBAE4BA9AE4B99FE8AEB8E68C87E69C9BE99DA03647E681A2E5A48DE7BB8FE890A5E78AB6E586B5E380823C2F703E0A3C703EE58D8EE4B8BAE4B99FE59CA8E4B8BAE6ADA4E8BF9BE8A18CE8A784E58892EFBC8CE5B7B2E59CA8E6B395E59BBDE58D97E983A8E79A84E7B4A2E88FB2E5A885C2B7E5AE89E89282E6B3A2E588A9E696AFE5BBBAE7AB8BE4BA863647E7A094E58F91E4B8ADE5BF83E38082E59CA832303139E5B9B4E68EA5E58F97E3808AE7BABDE7BAA6E697B6E68AA5E3808BE98787E8AEBFE697B6EFBC8CE58D8EE4B8BAE5889BE5A78BE4BABAE4BBBBE6ADA3E99D9EE69BBEE8A1A8E7A4BAEFBC9AE2809CE7BE8EE59BBDE5B086E5B88CE69C9BE694BEE59CA8E4BA863647E68A80E69CAFE4B88AE38082E4BD86E698AFEFBC8CE59CA83647E7A094E58F91E696B9E99DA2E58D8EE4B8BAE5B7B2E7BB8FE9A286E58588E4B896E7958CE38082E2809D3C2F703E0A, '2021-01-22 16:41:34');

 

上一篇:AntdPro项目前端测试的探索


下一篇:React Testing Library(RTL)