评论

收藏

[JavaScript] nodejs连接mysql数据库及基本认识

开发技术 开发技术 发布于:2021-06-29 09:57 | 阅读数:236 | 评论:0

  一、几个常用的全局变量


  • 1、__filename获取当前文件的路径
  • 2、__dirname获取当前文件的目录
  • 3、process.cwd()获取当前工程的目录
二、文件的引入与导出


  • 1、使用require引入文件
  • 2、使用module.exports导出文件中指定的变量、方法、对象
三、node项目的搭建目录结构
demo
  package.json 当前项目所依赖的包或者模块
  router  存放路由的文件
  views   存放视图的模块
  public  静态文件
  module 书写模块比如数据库
  app.js 主入口文件
四、将路由视图单独写在router文件中demo


  •   1、视图视图文件
    const express = require("express");
    const router = express.Router();
    router.get("/", (req, res) => {
      res.send("hello word");
    });
    router.get("/article", (req, res) => {
      res.send("我是文章列表");
    })
    module.exports = router;
  •   2、在主文件中调用
    'use strict';
    const express = require("express");
    const app = express();
    app.use("/",require("./router/03_router"))
    app.use("/app",require("./router/03_router1"))
    app.listen(3000);
五、使用ejs模板


  • 1、需要安装但可以不引入npm install ejs --save
  •   2、在主文件中配置
    //配置模板的文件路径
    app.set("views",__dirname+"/views");
    //配置模板引擎
    app.set("view engine","ejs");
  •   3、使用

    •   1、模板文件
      <!doctype html>
      <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
      </head>
      <body>
      <h1>我是模板渲染的</h1>
      </body>
      </html>
    •   2、在路由中渲染模板
      'use strict';
      const express = require("express");
      const router = express.Router();
      router.get("/", (req, res) => {
        //可以直接使用res.render("03_index");
        res.render("03_index.ejs");
      });
      router.get("/article", (req, res) => {
        res.send("我是文章列表");
      })
      module.exports = router;
    •   3、主文件
      'use strict';
      const express = require("express");
      const app = express();
      //配置模板的文件路径
      app.set("views",__dirname+"/views");
      //配置模板引擎
      app.set("view engine","ejs");
      app.use("/",require("./router/03_router"))
      app.use("/app",require("./router/03_router1"))
      app.listen(3000);

六、关于ejs模板文件的使用


  •   1、返回数据
    ...
    let dataset = {
      name:"张三",
      age:20,
      books:['三国演义','西游记','红楼梦','水浒传']
    }
    res.render("03_index.ejs",dataset);
    ...
  •   2、普通的字段
    <h2><%= name %></h2>
    <h2><%= age %></h2>
  •   3、迭代数组
    <ul>
      <% for(let i in books){%>
        <li><%= books[i] %></li>
      <%}%>
    </ul>
七、加载静态文件


  •   1、主文件中配置
    //设置静态文件的加载(js,css,img)
    app.use(express.static(__dirname+"/public"));
  •   2、在模板中使用
    <link rel="stylesheet" href="./css/bootstrap.css">
    <script type="text/javascript" src="./js/jquery-3.1.1.min.js"></script>
    <img src="./img/002.jpg">
    ...
八、使用mysql数据库


  •   1、在module中创建一个db.js的文件
    'use strict';
    const mysql = require("mysql");
    /**
     * 将整个方法全部暴漏出去
     * @param sql sql语句
     * @param arg 传递到sql语句中的参数,可以不写
     * @param callback 回调函数,可以不写
     */
    module.exports = function (sql,arg,callback) {
      //1.创建连接(根据自己的数据库配置)
      let config = mysql.createConnection({
        host:"localhost", //数据库的地址
        user:"root", //数据库用户名
        password:"root", //数据库密码
        port:"3306", //mysql数据库的端口号
        database:"mybatistest" //使用那个数据库
      });
      //2.开始连接数据库
      config.connect();
      //3.对数据库的增删改查操作
      config.query(sql,arg,(err,data)=>{
        callback && callback(err,data);
      })
      //4.关闭数据库
      config.end();
    }
  •   2、在router视图中使用查询数据

    •   1、引入文件
      //引入数据库文件
      const db = require("./../module/db");
    •   2、视图中使用
      router.get("/", (req, res) => {
        db("select * from m_dept",(err,data)=>{
          console.log(data);
          res.render("03_index.ejs",{data:data});
        })
      });

  •   3、新增数据

    • 1、前端页面见代码案例
    •   2、通过req.query获取用户数据参数
      router.get("/regist",(req, res)=>{
        //获取到输入参数,前提是input上要写name
        console.log(req.query);
        db("insert into student(name,age) values(?,?)",[req.query.username,req.query.age],(err,data)=>{
          console.log(data);
          if(data){
            res.send("成功");
          }
        })
      })

九、关于node返回json的方式
  在前后端分离开发模式中后端返回的数据一般都是json,不需要使用ejs模板引擎了
...
res.json({
  info:"成功",
  code:1
});
...
十、本章节代码代码案例


  
关注下面的标签,发现更多相似文章