一、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');
});