学习node.js

113 阅读8分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

fs-文件读取

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

例如:

fs.readFile()方法,用来读取指定文件中的内容

fs.writeFile()方法,用来向指定的文件中写入内容

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

const fs = require('fs')
fs. readFile(path[, options], callback)

参数1:必选参数,字符串,表示文件的路径。

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

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

示例:

如果读取成功,则 err 的值为 null

如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined

fs-文件写入

fs.writeFile()的语法格式

fs. writeFile(file, data[, options], callback)

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

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

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

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

如果出现路径拼接错误的问题,是因为提供了./或../开头的相对路径

如果要解决这个问题,可以直接提供一个完整的文件存放路径就行,注意绝对路径中\要换成\

Path路径模块

path模块是Node.js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。

例如:

path.join0 方法,用来将多个路径片段拼接成一个完整的路径字符串

path.basename 方法,用来从路径字符串中,将文件名解析出来

如果要在 JavaScript 代码中,使用 path 模块来处理路径,则需要使用如下的方式先导入它:

const path = require('path')

使用path.join0方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下:

path.join(__dirname,'path1','path2'...)

参数解读:

__dirname当前路径

'path1','path2'...路径片段的序列,由最上级开始每有一层就加一个

‘../’代表返回上一层,即抵消掉上一个路径

返回值:

使用path.join0方法,可以把多个路径片段拼接为完整的路径字符串:

注意:今后凡是涉及到路径拼接的操作,都要使用 path.join0 方法进行处理。不要直接使用 + 进行字符串的拼接。

获取路径中的文件名

path.basename()的语法格式

使用path.basename()方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名,语法格式如下:

path. basename(path[, ext])

参数解读:

path 必选参数,表示一个路径的字符串

ext 可选参数,表示文件扩展名

返回: 表示路径中的最后一部分

示例:从文件路径中获取到文件的名称部分

获取路径中的文件扩展名

path.extname(path)

参数解读:

path 必选参数,表示一个路径的字符串

返回: 返回得到的扩展名字符串

示例:

http模块的使用

// 1、导入http模块
const http=require('http');
// 2、定义服务程序的端口号
const port=8080;
// 3、创建服务器对象
const server=http.createServer((request,response)=>{
//这里的代码每收到一次请求就会执行一次
//request请求对象 response响应对象
response.end('hello nodejs http')//表示响应工作结束,这个方法后面不要再写响应的一些的操作
})
//4、调用服务器的监听方法,让服务器监听浏览器的请求
server.listen(port, (error)=>{
//用来表示监听有没有出错
console.log(error);//如果没有报错,undefined
console.log('服务器已经运行成功了');
})

PS:一个端口号只能被一个服务器使用!如果被占用就换一个端口号

获取请求的一些信息

获取请求路径request.url、请求方式request.method

const server = http.createServer((requestresponse)=>{
//这里的代码每收到一次请求就会执行一次
//request请求对象 response响应对象
//获取请求路径
	let reqUrl = request.url;
  console.log(requrl);

  //获取请求方式
	let reqMethod=request.method;
  console.log(reqMethod);
})

获取请求参数

const url=require('url');
//获取get请求参数
let parse=url.parse(reqUrl,true);
console.log(parse.query);
//以事件的方式来接收,事件名就是data,触发post请求,就会触发这个代码
  request.on('data',(postData)=>{
    // postData就是接收到请求参数
    console.log(postData.toString());
    })

nodemon的使用

作用;监听代码的改动,自动更新

express

安装

npm install express - save
yarn add express

使用

const express=require('express');
//2、创建app对象(app项目对象)
const app=express();
//3、监听请求
app.listen(3000,()=>{})
//处理请求
//第一个参数是请求路径,第二个参数是针对于这个路径的处理函数
app.get('/', (req, res) => {
 // 函数有两个形参
//第一个形参req是请求对象,第二个参数res是响应对象
res.send(' Hello World!')
})

示例:

处理post请求

使用body-parser模块

//引入body-parser模块
const bodyParser=require('body-parser');
app.use(bodyParser.urlencoded(fextended:false}));//false接收的值为字符串或者数组,true为任意类型
app.use(bodyParser.json());//解析json格式
app.post('/register.html',(req, res)=>{
let body= req.body;
let {username,email, password}=body;
console.log(body);
console.log(username, email,password);
res.send('post提交成功')
//后端业务逻辑
//获取请求参数
//对参数进行处理
//查询数据库,判断用户名是否注册
})

下载和安装mysql

下载地址:dev.mysql.com/downloads/mysql/

账户:root

密码:root123

安装和使用教程:

blog.csdn.net/m0_62317155…

目前已经完成安装以后每次使用只需要win+r输入cmd然后再命令行中输入mysqld --console打开mysql对话框不要关闭不要关闭不要关闭!新建一个cmd

然后输入用户名和密码即可(mysql -u root -p 密码)

这样以后每次启动就是通过win+r,输入cmd。打开两个命令行窗口,分别输入

mysqld --console
mysql -u root -p 
  输入密码

就可以了

ps:mysql语句每一行要用;分隔

显示数据库版本
  version select version();
查看当前使用的数据库
  select database();
查看所有数据库
  show databases;
创建数据库
  create database 数据库名 charset=utf8;
查看创建数据库的语句
	show create database 数据库名
删除数据库(不要轻易删除任何一个数据库!)
	drop database 数据库名

navicat破解教程

blog.51cto.com/u_15571262/…

mysql数据表相关操作

-- 查看当前数据库中所有表
-- show tables

-- 创建表:以下为相关可选参数值
-- int unsigned 无符号整形
-- auto_increment 表示自动增长跟主键在一起
-- not null 表示不能为空
-- primary key 表示主键
-- default 默认值

-- create table 数据表名字(字段 类型 约束[,字段 类型 约束]);
--创建 classes 表(有id、name两个字段)
create table classes(id int unsigned primary key auto_increment,name varchar(30)not null);
show create table 表名字;
alter table 表名 add 列名 类型;
  alter table classes add mascot varchar50);
  给classes表添加mascot字段
--修改表-修改字段:不重命名版
alter table 表名 modify 列名 类型及约束;
  alter table classes modify mascot varchar100);
--修改表-修改字段:重命名版
alter table 表名 change 原名 新名 类型及约束;
alter table classes change mascot jxw int unsigned;
--修改表-删除字段
alter table 表名 drop 列名;
alter table classes drop jxw;
  删除表
drop table 表名;
drop database 数据库;
drop table test;

mysql的增删查改

增加

全列插入
insert into 表名(字段1,字段2values(值1,值2);
insert into classes(id,name)values(3,'王五');
insert into 表名 values(值1,值2,值3...)
insert into students values(1,'张三',20,1.83,'男',01);
//没有的值要写null,不能不写
insert into 表名(列1,...) values(值1,...)
insert into students(name,age) values('李四',null);
insert into 表名(列1values(值),(值);
insert into students(name) values('王五'),('赵六');

修改

update 表名 set 列1=值1,列2=值2...where 条件;
update students set cls_id=1;
update students set age=30 where name='李四';
-- update students set gender ="",age = "" where name="xxx";
update students set gender='女',age=40 where name='王五';

查询

select*from 表名;
查询students表中的所有数据信息
select * from students;
查询id为1的学生所有信息
select * from students where id=1;
SELECT * FROM students WHERE age>18;
// ps:与运算可以用and以及between...and...来表示,取反用not来表示
select1,列2,...from 表名;
select id, name from students;
select 字段[as 别名],字段[as 别名]from 数据表;
select name as'名字',high as'身高'from students;

where name like 要查询的数据
like
% 替换任意个
_ 替换1个
查询姓名中 以"小" 开始的名字的学生信息
distinct 字段
SELECT distinct gender FROM students;
select age,name from students;

删除

delete from 表名 where 条件
delete from students where id=4
用一个字段来表示 这条信息是否已经不能再使用了
比如给students表添加一个 is_delete 字段 bit 类型
alter table 表名 add 字段 类型 default 默认值;
alter table students add is_delete bit default O;
update 表名 set is_delete=1 where id=x;
update students set is_delete=1 where id=1;

在服务器中调用mysql

命令:npm install mysql