• nodejs+express+mysql简单博客搭建


    参考学习视频    参考up视频学习

    创建gitee仓库

    gitee官网---------新建仓库(右上角+号)-------调好基本信息创建--------回到想要创建文件的位置,右键git bash here------根据gitee上的提示命令进行创建-------看到gitee上创建成功 

    本地环境搭建

    初始化

    npm init -y

    下载express mysql

    npm i express mysql -D

    创建app.js并进行基本配置

    1. const express = require("express");
    2. const app = express();
    3. app.get("/login", (req, res) => {
    4. res.send({
    5. status: 0,
    6. message: "请求成功!",
    7. data: [
    8. { id: 1, name: '张三', age: 23 },
    9. { id: 2, name: '李四', age: 22 },
    10. { id: 2, name: '王五', age: 25 },
    11. ]
    12. });
    13. res.end();
    14. })
    15. app.listen(3000, () => {
    16. console.log("服务器已开启 http://localhost:3000")
    17. });

    开启服务

    node app.js

    查看是否成功配置浏览器输入http://localhost:3000 查看是否有数据

    请求成功

     路由跳转封装

    新建pages目录-----目录下新建index.html  login.html给点内容

    路由配置app.js通过fs引入html文件(修改和增加app.js为)

    1. const express = require("express");
    2. const app = express();
    3. const fs = require("fs");
    4. app.get("/", (req, res) => {
    5. fs.readFile("pages/index.html", (err, data) => {
    6. if (!err) {
    7. res.end(data);
    8. } else {
    9. console.log(err);
    10. }
    11. })
    12. })
    13. app.get("/toLogin", (req, res) => {
    14. fs.readFile("pages/login.html", (err, data) => {
    15. if (!err) {
    16. res.end(data);
    17. } else {
    18. console.log(err);
    19. }
    20. })
    21. })
    22. app.listen(3000, () => {
    23. console.log("服务器已开启 http://localhost:3000")
    24. });

    打开localhost:3000默认打开index.html 

    输入localhost:3000/toLogin默认打开login.html页面

    页面路由封装

    因为引入文件代码高度重合相似,所以建立util.js文件,将公共的方法放在这里,优化代码

    1. const fs = require("fs");
    2. module.exports = {
    3. read: (url) => {
    4. return new Promise((resolve, rejects) => {
    5. fs.readFile(url, (err, data) => {
    6. if (!err) {
    7. resolve(data);
    8. } else {
    9. console.log(err);
    10. rejects(err);
    11. }
    12. })
    13. })
    14. }
    15. }

    app.js为:

    1. const express = require("express");
    2. const app = express();
    3. const fs = require("fs");
    4. const util = require("./util");
    5. app.get("/", (req, res) => {
    6. util.read("pages/index.html").then((data) => {
    7. res.end(data);
    8. })
    9. })
    10. app.get("/toLogin", (req, res) => {
    11. util.read("pages/login.html").then((data) => {
    12. res.end(data);
    13. })
    14. })
    15. app.listen(3000, () => {
    16. console.log("服务器已开启 http://localhost:3000")
    17. });

    访问成功,路由封装成功

    连接mysql数据库

    配置连接,比如说请求/getList拿到数据库数据,这里出了bug连接不上,最后也是修改了配置

    db_config里面属性按照自己的去配置

    1. //数据库操作
    2. app.get("/getList", (err, res) => {
    3. const db_config = {
    4. host: "localhost",
    5. user: "root",
    6. password: "123456",
    7. port: "3306",
    8. database: "blog"
    9. }
    10. let connect = mysql.createConnection(db_config);
    11. //开始链接数据库
    12. connect.connect(function(er) {
    13. if (er) {
    14. console.log(`mysql连接失败: ${er}!`);
    15. } else {
    16. console.log("mysql连接成功!");
    17. }
    18. });
    19. //基本的查询语句
    20. let sqlQuery = "select * from t_user";
    21. connect.query(sqlQuery, function(e, result) {
    22. if (e) {
    23. console.log(`SQL error: ${e}!`);
    24. } else {
    25. console.log(result);
    26. res.send(JSON.parse(JSON.stringify(result)));
    27. closeMysql(connect);
    28. }
    29. });
    30. //查询成功后关闭mysql
    31. function closeMysql(connect) {
    32. connect.end((err) => {
    33. if (err) {
    34. console.log(`mysql关闭失败:${err}!`);
    35. } else {
    36. console.log('mysql关闭成功!');
    37. }
    38. });
    39. }
    40. });

    但是每个都需要就太麻烦了,所以我们建立一个db.js专门配置数据库

    1. const mysql = require("mysql");
    2. const db_config = {
    3. host: "localhost",
    4. user: "root",
    5. password: "123456",
    6. port: "3306",
    7. database: "blog"
    8. }
    9. exports.db = (sql, sqlParams) => {
    10. return new Promise((resolve, reject) => {
    11. let connect = mysql.createConnection(db_config);
    12. //开始链接数据库
    13. connect.connect(function(er) {
    14. if (er) {
    15. console.log(`mysql连接失败: ${er}!`);
    16. } else {
    17. console.log("mysql连接成功!");
    18. }
    19. });
    20. connect.query(sql, sqlParams, function(e, result) {
    21. if (e) {
    22. reject(e)
    23. console.log(`SQL error: ${e}!`);
    24. } else {
    25. console.log(result);
    26. resolve(result)
    27. closeMysql(connect);
    28. }
    29. });
    30. //查询成功后关闭mysql
    31. function closeMysql(connect) {
    32. connect.end((err) => {
    33. if (err) {
    34. console.log(`mysql关闭失败:${err}!`);
    35. } else {
    36. console.log('mysql关闭成功!');
    37. }
    38. });
    39. }
    40. })
    41. }

    此时的app.js

    1. const express = require("express");
    2. const app = express();
    3. const { db } = require("./db");
    4. const util = require("./util");
    5. app.get("/", (req, res) => {
    6. util.read("pages/index.html").then((data) => {
    7. res.end(data);
    8. })
    9. });
    10. app.get("/toLogin", (req, res) => {
    11. util.read("pages/login.html").then((data) => {
    12. res.end(data);
    13. })
    14. });
    15. //数据库操作
    16. app.get("/getList", (err, res) => {
    17. const sql = "select * from t_user";
    18. const sqlParams = null;
    19. db(sql, sqlParams).then((data) => {
    20. res.send(data);
    21. })
    22. });
    23. // 增加数据库用户操作
    24. //数据库操作
    25. app.get("/addList", (err, res) => {
    26. const sql = "insert into t_user set ?";
    27. const sqlParams = { id: 7, name: 'lld', age: 14, sex: 0 };
    28. db(sql, sqlParams).then((data) => {
    29. res.send(data);
    30. })
    31. });
    32. app.listen(3001, () => {
    33. console.log("服务器已开启 http://localhost:3001")
    34. });

    静态资源配置

    根目录下新建文件 static

    static下新建css js upload 目录   

    css新建index.css文件

    配置 在app.js中

    app.use('/static', express.static(__dirname + '/static')); //静态文件

    在index.html中调用

     <link rel="stylesheet" href="static/css/index.css">

    于是便可以看到效果成功引入

    数据持久化模块分离

     不同路径下的动作可能是一样的,比如说登录或者注册路径都需要向数据库查询手机后操作,所以封装好模块方便你我他。

  • 相关阅读:
    【Python】conda虚拟环境下使用pyinstaller打包程序为exe
    《DevOps 精要:业务视角》- 读书笔记(六)
    小程序自定义tabbar如何显示隐藏
    MybatisPlus搭建项目
    Linux C/C++异常处理方法
    Hadoop-2.7.3完全分布式集群搭建(Centos7系统)
    xss一些笔记
    【MindSpore功能】昇腾910上跑Mindspore.ops中算子,AIcore利用率为0,启动多个进程报错
    第二章:数据的表示和运算
    父进程循环创建三个子进程, 并用sigchld完成对子进程的回收
  • 原文地址:https://blog.csdn.net/enhenglhm/article/details/123338851