node.js+express+mysql

一、Node

   node.js简介

        node.js是一个基于Chrome V8引擎的JavaScript运行环境(后端的)

        官方网站:Node.js

注意:

          1.浏览器是JavaScript的前端运行环境

          2.node.js是JavaScript的后端运行环境

          3.node.js中无法调用DOM和BOM等浏览器内置API

    查看node.js是否安装

查看已安装的node.js的版本号:node -v

     Fs文件系统模块

        1)什么是fs文件系统模块

fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:

方法名

说明

fs.readFile()

用来读取指定文件中的内容

fs.writeFile()

用来向指定的文件中写入内容

        2)fs.readFile():读取指定文件的内容

        参数:

                必选参数,字符串,表示文件路径;

                可选参数,表示以什么编码格式来读取文件

                必选参数,文件读取完,通过回调函数拿到读取的结果

        fs.readFile()的示例代码:

// 1. 导入 fs 模块,来操作文件
const fs = require('fs');
 
// 2. 调用 fs.readFile() 方法读取文件
//    参数1:读取文件的存放路径
//    参数2:读取文件时候采用的编码格式,一般默认指定 utf8
//    参数3:回调函数,拿到读取失败和成功的结果  err  data
fs.readFile('./files/11.txt', 'utf8', function(err, data) {
  // 2.1 打印失败的结果
  // 如果读取成功,则 err 的值为 null
  // 如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined
  console.log(err)
  console.log('-------')
  // 2.2 打印成功的结果
  console.log(data)
})

        3)fs.writeFile():向指定的文件中写入内容

        参数解读:

                参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。

                参数2:必选参数,表示要写入的内容。

                参数3:可选参数,表示以什么格式写入文件内容,默认值utf8。

                参数4:必选参数,文件写入完成后的回调函数。

        fs.writeFile()的示例代码:

// 1. 导入 fs 文件系统模块
const fs = require('fs')
 
// 2. 调用 fs.writeFile() 方法,写入文件的内容
//    参数1:表示文件的存放路径
//    参数2:表示要写入的内容
//    参数3:回调函数
fs.writeFile('./files/3.txt', 'ok123', function(err) {
  // 2.1 如果文件写入成功,则 err 的值等于 null
  // 2.2 如果文件写入失败,则 err 的值等于一个 错误对象
  // console.log(err)
  if (err) {
    return console.log('文件写入失败!' + err.message)
  }
  console.log('文件写入成功!')
})

        4)fs 模块 - 路径动态拼接的问题

        在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 ../ 开头的相对路径时,很容易出现路径动态拼接错误的问题。

        原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。

        解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或 ../ 开头的相对路径,从而防止路径动态拼接的问题。

        __dirname:表示当前文件所处的目录,这是node给我们提供的一个函数

fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, dataStr) {
    if (err) {
      return console.log('读取文件失败!' + err.message)
    }
    console.log('读取文件成功!' + dataStr)
  })

二、 Express

    express简介

        官方给出的概念::Express是基于Node.js 平台,快速、开放、极简的Web开发框架

        通俗的理解::Express的作用和Node.js内置的 http模块类似,是专门用来创建Web服务器的。Express的本质:就是一个npm 上的第三方包,提供了快速创建Web 服务器的便捷方法。

        Express 的中文官网:http://www.expressjs.com.cn/

    express的基本使用

// 1. 导入 express
const express = require('express')
// 2. 创建 web 服务器
// const app = express()
// 3. 启动并监听服务器
app.listen('8383')

        1)监听get请求

通过app.get()方法可以监听客户端的get请求,语法如下:

//参数1:客户端请求的 URL 地址
//参数2:请求对应的处理函数
//      req:请求对象 (包含了与请求相关的属性与方法)
//      res:响应对象 (包含了与响应相关的属性与方法)
app.get('请求URL',(req,res)=>{
    //处理函数
})

        2)监听post请求

通过app.post()方法可以监听客户端的post请求,语法如下:

//参数1:客户端请求的 URL 地址
//参数2:请求对应的处理函数
//      req:请求对象 (包含了与请求相关的属性与方法)
//      res:响应对象 (包含了与响应相关的属性与方法)
app.post('请求URL',(req,res)=>{
    //处理函数
})

        3)把内容响应给客户端

 通过res.send()方法,可以把处理好的内容发送给客户端

app.get('/user', (req, res) => {
    // 调用 express 提供的 res.send() 方法,向客户端响应一个 JSON 对象
    res.send({name: 'zs', age: 20, gender: '男'})
})

app.post('/user', (req, res) => {
    // 调用 express 提供的 res.send() 方法,向客户端响应一个 文本字符串
   res.send('请求成功')
})

    处理get请求参数 

        1)通过 req.query 对象,可以访问到客户端通过查询字符串的形式,发送到服务器的参数:

app.get('/', (req, res) => {
    //通过req.query 可以获取客户端发送过来的 查询参数
    // 注意:默认情况下,req.query是一个空对象
    console.log(req.query);
    res.send(req.query)
})

        2)通过req.params对象,可以访问到URL中由冒号(:)匹配到的动态参数:

// 这里的【:id】是一个动态的参数
app.get('/user/:id', (req, res) => {
    // 通过 req.params 是动态匹配到的 URL 参数,默认也是一个空对象
    console.log(req.params);
    res.send(req.params)
})

        注意:url中可加多个参数,例如:/user/:id/:name 

    处理post请求参数

        1)通过 body-parser  中间件,解析请求体

作用:可以解析JSON、Raw、文本、URL-encoded格式的请求体。

用法:现在express框架中安装,在app.js主文件中导入

//node中框架express需要单独引入
const express = require('express');
//通过express创建一个服务器/应用
const app = express();

//导入body-parser
//body-parser具体用法可在npm官网查看
const bodyparser = require('body-parser');

//注册解析类型,解析 application/x-www-form-urlencoded
app.use(bodyparser.urlencoded({
    extend:false
}))

        2)可以通过绑定两个事件,来获取请求带的参数

app.post('/page', (req, res) => {
    let sum = ''
    req.on('data',value=>{
        sum += value
    })
    req.on('end',()=>{
        console.log('end',sum);
    })
})

三、MySQL

    Mysql简介

         MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。

    Node.js连接mysql

         1)官网:Node.js 连接 MySQL | 菜鸟教程

        2)安装mysql包

 npm install mysql

        3)打开mysql,创建数据库

  • 打开mysql

 

  • 可以通过sql语句查看已有数据库

        Sql语句官网:MySQL 管理 | 菜鸟教程

  • 创建新的数据库以备自己使用

Sql语句 :create database 数据库名; 

  • 选择新创建的数据库

 Sql语句:use 数据库名;

 

  • 创建数据表

 Sql语句:create table 数据表名 (属性 类型, 属性 类型)

 

  •  连接已创建数据库
const express = require('express');
const app = express();
const mysql = require('mysql');

let connection = mysql.createConnection({
    host:'localhost',
    user:'root',
    password:'xwq1009',
    database:'teacher'
})
connection.connect();
// app.get('/',(req,res)=>{
//     //第一步:书写sql语句
//     var sql = "select * from math";
//     // var sql = `insert into math(username,password) values (${user},${req.query.password})`;
//     // var sql = "insert into math(username,password) values ("+user+","+req.query.password+")";
//     //以上两种方法不适用于中文

//     //第二步:执行sql语句
//     connection.query(sql,(err,result)=>{
//         if(err){
//             console.log('[SELECT ERROR] - ',err.message);
//             return;
//         }
//         res.send(result);
//         connection.end();
//     })

// })
app.use('/',express.static("./public"))
 
app.get('/login',(req,res)=>{
    //第一步:书写sql语句
    var addSql = 'INSERT INTO math(usernqme,password) VALUES (?,?)';
    var addSqlParams = [req.query.username,req.query.password];
    // 第二步:执行sql语句
    connection.query(addSql,addSqlParams,(err, result)=> {
        if(err){
         console.log('[INSERT ERROR] - ',err.message);
         return;
        }        
 
       console.log('--------------------------INSERT----------------------------');
       //console.log('INSERT ID:',result.insertId);        
       console.log('INSERT ID:',result);        
       console.log('-----------------------------------------------------------------\n\n');  
    });
 
    connection.end();

})

app.listen('8383')
  • 进行增删改查

 增

var addSql = 'INSERT INTO math(usernqme,password) VALUES (?,?)';
    var addSqlParams = [req.query.username,req.query.password];
    // 第二步:执行sql语句
    connection.query(addSql,addSqlParams,(err, result)=> {
        if(err){
         console.log('[INSERT ERROR] - ',err.message);
         return;
        }        
 
       console.log('--------------------------INSERT----------------------------');
       //console.log('INSERT ID:',result.insertId);        
       console.log('INSERT ID:',result);        
       console.log('-----------------------------------------------------------------\n\n');  
    });

 删

var delSql = 'DELETE FROM websites where id=6';
//删
connection.query(delSql,function (err, result) {
        if(err){
          console.log('[DELETE ERROR] - ',err.message);
          return;
        }        
 
       console.log('--------------------------DELETE----------------------------');
       console.log('DELETE affectedRows',result.affectedRows);
       console.log('-----------------------------------------------------------------\n\n');  
});

 

var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';
var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com',6];
//改
connection.query(modSql,modSqlParams,function (err, result) {
   if(err){
         console.log('[UPDATE ERROR] - ',err.message);
         return;
   }        
  console.log('--------------------------UPDATE----------------------------');
  console.log('UPDATE affectedRows',result.affectedRows);
  console.log('-----------------------------------------------------------------\n\n');
});

查 

var  sql = 'SELECT * FROM websites';
//查
connection.query(sql,function (err, result) {
        if(err){
          console.log('[SELECT ERROR] - ',err.message);
          return;
        }
 
       console.log('--------------------------SELECT----------------------------');
       console.log(result);
       console.log('------------------------------------------------------------\n\n');  
});

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值