ndoe+mysql+express基础应用
介绍
1.express
- 为不同 URL 路径中使用不同 HTTP 动词的请求(路由)编写处理程序。
- 集成了“视图”渲染引擎,以便通过将数据插入模板来生成响应。
- 设置常见 web 应用设置,比如用于连接的端口,以及渲染响应模板的位置。
- 在请求处理管道的任何位置添加额外的请求处理“中间件”。
环境准备
1.安装node
2.安装mysql,配置环境变量
3.安装vsCode的mysql插件
初始化项目
1.创建项目
npm init -y
2.安装依赖
npm i express mysql
3.安装配置热更新
npm i hotnode -g // 安装
4.配置启动命令
"start": "hotnode index.js" // package.json中配置启动命令
接口实现
简单接口实现
const express = require("express");
const app = express();// 请求拦截 会匹配所有请求
app.all("*", (req, res, next) => {const login = Math.random();if (login > 0.5) return res.json("未登录");next();
});// get请求
app.get("/", (req, res) => {res.send("Hello World");
});
app.get("/liyfn", (req, res) => {res.send("Hello liyfn");
});// post
app.post("/post", (req, res) => {res.json({ name: "liyfn" });
});app.listen(3000, () => {console.log("Server is running on port 3000");
});
参数解析
// 安装body-parser
const bodyParser = require("body-parser");
app.use(bodyParser.json()); // json请求
app.use(bodyParser.urlencoded({ extended: false })); // 表单// 使用 body:请求体 query:查询参数
app.post("/post", (req, res) => {console.log(req.query, req.params, req.body);res.json({ name: "liyfn" });
});
跨域
// 解决跨域
const cors = require("cors");
app.use(cors());
数据库连接
1.基础连接
// 创建连接对象
var connection = mysql.createConnection(options);
// 连接
connection.connect(function(err) { *** });
// 关闭
connection.end(function(err) { *** });
connection.destroy();
2.连接池
// 连接mysql
const mysql = require("mysql");
const db = mysql.createPool({host: "localhost",user: "root",port: "3306",password: "123456",database: "demo",
});db.query("select * from userinfo", (err, data) => {console.log(data);
});
3.区别
当连接不再需要时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,从连接池中取出连接并重新利用,而不需要再重新建立连接
项目应用
安装脚手架
yarn global add express express-generator
创建项目
express --view=pug
--version 打印版本号-e, --ejs 添加 ejs 引擎支持--pug 添加 pug 引擎支持--hbs 添加 handlebars 引擎支持-H, --hogan 添加 hogan.js 引擎支持-v, --view <engine> 添加 <engine> 视图引擎支持 (ejs|hbs|hjs|jade|pug|twig|vash) (默认为 jade)-c, --css <engine> 添加 <engine> 样式表引擎支持 (less|stylus|compass|sass) (默认为纯 css)--git 添加 .gitignore-f, --force 对非空文件夹强制执行-h, --help 打印帮助信息
配置打印日志
1.安装winston
yarn add winston
2.封装本地日志写入方法logger.js
const { createLogger, format, transports } = require("winston");
const fs = require("fs");
const path = require("path");const env = process.env.NODE_ENV || "development";
const logDir = "log";// Create the log directory if it does not exist
if (!fs.existsSync(logDir)) {fs.mkdirSync(logDir);
}const filename = path.join(logDir, "results.log");const logger = createLogger({// change level if in dev environment versus productionlevel: env === "production" ? "info" : "debug",format: format.combine(format.label({ label: path.basename(process.mainModule.filename) }),format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" })),transports: [new transports.Console({format: format.combine(format.colorize(),format.printf((info) =>`${info.timestamp} ${info.level} [${info.label}]: ${info.message}`)),}),new transports.File({filename,format: format.combine(format.printf((info) =>`${info.timestamp} ${info.level} [${info.label}]: ${info.message}`)),}),],
});module.exports = logger;
3.改写原错误处理方式
const logger = require("./logger");
const errorHandler = (err, req, res, next) => {logger.error(`${err.method} ${req.originalUrl}` + err.message);const errorMessage = err.message;res.status(err.status || 500).json({code: -1,success: false,message: errorMessage,data: null,});
};
app.use(errorHandler);
使用数据库
1.安装mysql插件 mysql 和 查询构建器knex
yarn add mysql knex
2.配置文件
module.exports = {mysql: {host: "127.0.0.1",port: 3306,user: "root",password: "123456",database: "demo",},log: {error(msg) {console.log("[knex error]", msg);},},
};
3.连接数据库 knex.js
const config = require("../config");
const knex = require("knex");
// 建立连接
module.exports = knex({client: "mysql",connection: {...config.mysql,},log(msg) {console.log("[knex error]", msg);},
});
4.封装基础增删改查方法base.js
const knex = require("./knex");// 增删改查
class Base {constructor(table) {this.table = table;}// 查get() {return knex(this.table).select();}// 增insert(params) {return knex(this.table).insert(params);}// 改update(id, params) {return knex(this.table).where("id", "=", id).update(params);}// 删除del(id) {return knex(this.table).where("id", "=", id).del();}
}
module.exports = Base;
5.封装表模型
const Base = require("./base");class Author extends Base {constructor(props = "author") {super(props);}
}module.exports = new Author();
6.数据查询
const Author = require("../models/author");// 获取数据
const getAuthor = {showUser: async (req, res) => {try {let data = await Author.all();res.json({code: 200,message: "操作成功",data,});} catch (error) {res.json({code: 0,message: "获取失败",});}},
};module.exports = getAuthor;
7.接口返回封装
var express = require("express");
var router = express.Router();const authorController = require("../controllers/author");/* GET users listing. */
router.get("/", authorController.showUser);module.exports = router;
knex使用
https://knexjs.org/guide/
相关文章:
ndoe+mysql+express基础应用
介绍 1.express 为不同 URL 路径中使用不同 HTTP 动词的请求(路由)编写处理程序。集成了“视图”渲染引擎,以便通过将数据插入模板来生成响应。设置常见 web 应用设置,比如用于连接的端口,以及渲染响应模板的位置。在…...
后端项目开发:集成日志
SpringBoot 默认选择的是slf4j做日志门面,logback做日志实现。由于log4j有性能问题,不建议使用。 由于log4j2的表现性能更好,我们需要集成log4j2,同时排除旧的日志实现包。 <!-- Spring Boot 启动器 --> <dependency>…...
20-GIT版本控制
GIT 一 简介 场景 团队协作的时候,我们项目开发会遇到代码需要进行管理的场景。 多个开发者之间,每天写的代码可能需要合并,共享。 例子:我写的用户模块、小王写的订单模块,用户模块最终需要跟订单模块合并。 每天写完代码,qq、u盘拷贝,代码合并一个项目中。 希望…...
解决前后端交互Long类型精度丢失的问题
1、全局注解 package com.jiawa.train.common.config;import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import org.springframework.c…...
回归预测 | MATLAB实现GA-ELM遗传算法优化极限学习机多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现GA-ELM遗传算法优化极限学习机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GA-ELM遗传算法优化极限学习机多输入单输出回归预测(多指标,多图)效果一览基本介绍程序…...
SpringCloud学习笔记(九)_使用Java类加载SpringBoot、SpringCloud配置文件
我们都知道平常在使用SpringBoot和SpringCloud的时候,如果需要加载一两个配置文件的话我们通常使用Value(“${属性名称}”)注解去加载。但是如果配置文件属性特别多的时候使用这种方式就显得特别的不友好了。 比如说,我们要加载下方这个名为application.…...
三次握手四次挥手之全连接半连接队列
什么是全连接半连接 在 TCP 三次握手的时候,Linux 内核会维护两个队列,分别是: 半连接队列,也称 Listen 队列;全连接队列,也称 accept 队列; 工作原理 每一个socket执行listen时,…...
Racknerd便宜高性价比服务器汇总
介绍 Racknerd是近年来比较良心的高性价比主机商了 我制作了Racknerd服务器看板,统计所有在售的VPS和独立服务器 支持多栏目筛选以及排序,帮助你挑选目前在售的主机 也支持筛选最近上架、补货的机器 注意 1.爬虫数据可能有延迟性、不准确性ÿ…...
JavaScript 基础知识回顾与复习---关于this
在JavaScript中,this是一个关键字,它在不同的上下文中引用不同的对象,其this的绑定是动态的,这主要取决于函数的调用方式。this的绑定是函数运行时才确定的而不是编写是就绑定。在我看来this就像魔法一样让人难以理解掌握…...
Lua之Lua源文件批量转换为luac字节码文件
准备的工具:luac.exe CSDNhttps://mp.csdn.net/mp_download/manage/download/UpDetailed Unity版: using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public static class Bat…...
简历V1.0问题合集 8/25-26
记录完 去看相应的知识点 对应着修改 (带着问题总结 效果更好 把这一部分先过完) Axois 1.axios.interceptors.request.use 和 response.use主要操作了什么了 你简历说了封装。这个要了解 2.axios get post put delete 请求里payload 、query string …...
P1052 [NOIP2005 提高组] 过河
[P1052 NOIP2005 提高组] 过河 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 问题描述:给定长度L,和一次可以跳动的长度 s 到 t,给定m个石头的位置,求最少经过多少个石头可以超过L。 思路:如果L很小的话࿰…...
ArrayList和Vector及LinkedList的区别
1.ArrayList和Vector的区别 第一句话:ArrayList和Vector底层都是数组实现的,初始容量都为10;在ArrayList的底层,是通过定义一个DEFAULT_CAPACITY的常量来指定的,而Vector的底层,是直接在空参构造中&#x…...
HVV爆火漏洞:最新 WPS RCE (远程命令执行) 复现
最近HVV爆出的很火的WPS命令执行漏洞,其实并不是0DAY,早在2019年就出现了,只不过最近EXP才公开。接下来我们来复现一遍。 0x00 影响版本 WPS Office 2023 个人版 < 11.1.0.15120WPS Office 2019 企业版 < 11.8.2.12085 0x01 环境配置…...
我的128天创作纪念日-东离与糖宝
文章目录 机缘收获日常成就憧憬 不知不觉我也迎来了自己的128天创作纪念日,一起来看看我有什么想对大家说的吧 机缘 我的写博客之旅始于参加了代码随想录算法训练营。在训练营期间,代码随想录作者卡尔建议我们坚持每天写博客记录刷题学习的进度和心得体…...
卷积神经网络——下篇【深度学习】【PyTorch】【d2l】
文章目录 5、卷积神经网络5.10、⭐批量归一化5.10.1、理论部分5.10.2、代码部分 5.11、⭐残差网络(ResNet)5.11.1、理论部分5.11.2、代码部分 话题闲谈 5、卷积神经网络 5.10、⭐批量归一化 5.10.1、理论部分 批量归一化可以解决深层网络中梯度消失和…...
cas md5加密
CAS Authentication Credentials #cas.authn.accept.userscasuser::Mellon 查询账号密码SQL,必须包含密码字段 cas.authn.jdbc.query[0].sqlselect * from ca_user where username? 指定上面的SQL查询字段名(必须) cas.authn.jdbc.query…...
[管理与领导-51]:IT基层管理者 - 8项核心技能 - 6 - 流程
前言: 管理者存在的价值就是制定目标,即目标管理、通过团队(他人)拿到结果。 要想通过他人拿到结果: (1)目标:制定符合SMART原则的符合业务需求的目标,团队跳一跳就可以…...
天翼物联、汕头电信与汕头大学共建新一代信息技术与数字创新(物联网)联合实验室
近日,在工业和信息化部和广东省人民政府共同主办的2023中国数字经济创新发展大会上,天翼物联、汕头电信与汕头大学共建“新一代信息技术与数字创新(物联网)”联合实验室签约仪式举行。汕头大学校长郝志峰、中国电信广东公司总经理…...
Failed to load local image resource/images/1.jpg无法加载本地图片资源
微信小程序开发无法加载本地图片 先放报错图片 绝对路径不行, <image src"../../images/1.jpg" mode"heightFix"></image>使用相对路径就可以了 <image src"../../images/1.jpg" mode"heightFix"><…...
Go和Java实现责任链模式
Go和Java实现责任链模式 下面通过一个审批流程的案例来说明责任链模式的使用。 1、责任链模式 责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这 种类型的设计模式属于行为型模式。 在这种模式中&#x…...
C#+GDAL影像处理笔记08:生成DEM的图阔范围线
目录 1 实现思路 2 源码及解析 1 实现思路 首先获取DEM数据的转换参数信息,这个信息记录了DEM的放射变换参数,包括左上角X,X方向分辨率、0、左上角Y、0、Y方向的分辨率【负值】等信息。接着是根据转换参数,计算DEM分幅数据的四至范围坐标;主要用到上一步得到的转换参数信…...
敏捷研发管理软件及敏捷管理流程
Scrum中非常强调公开、透明、直接有效的沟通,这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求,故事,任务之间的流转状态,可以使团队成员更加快速适应敏捷开发流程。 …...
Mac OS 13.4.1 搜狗输入法导致的卡顿问题
一、Mac OS 系统版本 搜狗输入法已经更新到最新 二、解决方案 解决方案一 在我的电脑上面需要关闭 VSCode 和 Chrmoe 以后,搜狗输入法回复正常。 解决方案二 强制重启一下搜狗输入法。 可以用 unix 定时任务去隔 2个小时自动 kill 掉一次进程 # kill 掉 mac …...
vue 简单实验 自定义组件 局部注册
1.概要 2.代码 <html> </html> <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <body><div id"counter"><component-a></component-a></div> </body&g…...
Resnet模型详解
1、Resnet是什么? Resnet是一种深度神经网络架构,被广泛用于计算机视觉任务,特别是图像分类。它是由微软研究院的研究员于2015年提出的,是深度学习领域的重要里程碑之一。 2、网络退化问题 理论上来讲,随着网络的层…...
AI 绘画Stable Diffusion 研究(十六)SD Hypernetwork详解
大家好,我是风雨无阻。 本期内容: 什么是 Hypernetwork?Hypernetwork 与其他模型的区别?Hypernetwork 原理Hypernetwork 如何下载安装?Hypernetwork 如何使用? 在上一篇文章中,我们详细介绍了 …...
2023.8 -java - 继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的特性 子类拥有父类非 private 的属性、方法。 子类可以拥有自己的属性和方法…...
前端面试:【移动端开发】PWA、Hybrid App和Native App的比较
在移动端开发中,开发者有多种选择,包括渐进式Web应用(PWA),混合应用(Hybrid App)和原生应用(Native App)。每种方法都有其独特的优势和适用场景。本文将对它们进行比较&a…...
picGo+gitee+typora设置图床
picGogiteetypora设置图床 picGogitee设置图床下载picGo软件安装picGo软件gitee操作在gitee中创建仓库在gitee中配置私人令牌 配置picGo在插件设置中搜索gitee插件并进行下载 TyporapicGo设置Typora 下载Typora进行图像设置 picGogitee设置图床 当我了解picGogitee可以设置图床…...
网站设计方案怎么做/整合营销案例举例说明
第五周任务 这周开始学习函数,这在任何一门语言中都是一个大头(在Java中我们称为方法)。 首先很重要的一点是,如果你像我一样习惯把自定义的函数放在main方法后面的话,那么一定要记得先声明函数。例如我现在定义了一个…...
wordpress3.3/网络营销与传统营销的区别
1)API申请2)API调用3)[b]效果展示[/b]4)精准查询--------------------------------------------------------------------------1)API申请爱帮提供查询接口API,需要申请Key http://www.aibang.com查询数量有限制,2013-12-4 最多 1000次/每天 10次/分钟返…...
如何做网站赚/seo做关键词怎么收费的
转载:https://zhuanlan.zhihu.com/p/27903657 本故事纯属虚构,如有雷同,实属巧合前言 程 是一个爱折腾,喜欢交朋友的程序员。 某一天,程一个朋友介绍了另外一个朋友 创 给他,创说他有个点子,可…...
湛江网站建设公司/seo推广策划
在某些小型组织中,可能有必要在集线器传输服务器上运行 Microsoft Exchange Server 2010 反垃圾邮件功能。例如,某些组织可能没有相当数量的电子邮件,因此没有必要投入成本安装和维护完备的外围网络以及边缘传输服务器。可以在集线器传输服务…...
qq空间可以做网站吗/电商seo优化
这里是对docker compose 网络配置的一些说明,详细的文档参考: https://docs.docker.com/compose/networking/ 1 default network 如果不显式指定,Compose会为每一个app设置一个default网络。每个service的container会加入这个default网络并…...
树莓派运行wordpress/国产长尾关键词拘挖掘
先说一下栈和堆栈,我们听老一辈的程序员一般都会说堆栈,其实栈就是堆栈的意思,连着叫只是由于历史的原因。博主04年学数据结构的时候,书上都是说的堆栈,FILO(先进后出),也经常拿堆栈和队列,FIFO…...