目录
1.引入http模块和创建服务器 http.createServer();
5.req.url 路由(端口号后面的部分就是路由:req.url)
6.浏览器地址栏输入的地址不一样,向请求服务器请求的页面就不一样怎么写?
2.第三方模块:别人写好的,我们直接拿过来用。+ npm相关指令
4.服务器除了自己写,还可以用他人写的eg:Apach,Nginx
nodejs模块主要分为三类:系统模块 第三方模块 自定义模块
__dirname表示什么意思
其中保存的是字符串, 当前的js文件 所在的目录(是地址,字符串)。
1.系统模块:底层自带的,直接用
1.fs模块 针对于文件的操作。
01.读取文件 fs.readFile()
这是异步的。
let fs = require('fs');
fs.readFile('./index.html',{encoding:'utf-8'},(err,data)=>{
if(!err){
console.log(data);
}
});
分析:{encoding:'utf-8'} 这个参数可以省略,字符编码的意思。
02.写入文件(创建文件) fs.writeFile()
这是异步的。
fs.writeFile(path ,data,callback(err)) 如果文件存在,该方法写入的内容会覆盖旧的文件内容,不存在就创建一个新的文件。
注意:如果不要覆盖掉以前的,就要利用fs.writeFile省略的第3个参数:
let fs = require('fs');
fs.writeFile('./a.txt','你好啊',{flag:'a'},(err)=>{
if (!err) {
console.log(666);
}
});
分析:参数 {flag:'a'} 的意义就是不覆盖掉以前的,直接在以前的后面写。
eg:以前的a.txt文件内容为:花花是美丽女孩。现在是:花花是美丽女孩。你好啊。
03.fs.mkdir() 创建一个文件夹
这是异步的。
注意:一次性只能创建一个文件夹,一次性创建多个会报错。
// 导入fs模块
let fs = require('fs');
fs.mkdir('./public/css',(err)=>{
if(!err){
console.log(666);
}else{
console.log('出错了');
}
});
//出错了,一次性创建了两个文件夹 ./public/css (public和css都没创建过)
// 导入fs模块
let fs = require('fs');
fs.mkdir('./public',(err)=>{
if(!err){
console.log('创建成功',666);
}else{
console.log('出错了');
}
});
//创建成功 666
注意:如果想一次性创建多个目录,就用fs.mkdir省略的 第二个参数{recursive:true}
// 导入fs模块
let fs = require('fs');
fs.mkdir('./upload/hh',{recursive:true},(err)=>{
if(!err){
console.log('创建成功',666);
}else{
console.log('出错了');
}
});
//创建成功 666
分析: fs.mkdir省略的 第二个参数 {recursive:true} 可以让一次性创建多个目录。
04. fs.copyFileSync(要copy的文件,copy到新的文件路径);
要copy的文件:是前端发送给后端的文件,在前端电脑上保存的文件
后端接收:let clientData = ctx.request.files
copy到新的文件路径(包括新的文件的名字)):
let newimgpath = path.dirname(__dirname)+`/public/upload/${path.basename(clientData[0].filepath)}`
fs.copyFileSync(clientData[0].filepath,newimgpath);
2.path模块
1.path.dirname(path)
01.传入的路径path是以文件夹结尾
如果 分割符是 \ ,则返回本第磁盘(意义不大)
let path = require('path');
console.log(path.dirname('F:\A_class\node')); //F:
如果分隔符是 / ,则返回
//js文件中
let path = require('path');
console.log(path.dirname('F:/A_class/node')); //F:/A_class
分析:如果是以文件夹结尾,path.dirname返回的是当前js文件所在文件夹的上一个文件夹的路径。
eg:这个js文件所在文件夹是node文件夹,node文件夹上一个文件夹是 A_class.返回的是
F: /A_class
02.传入的路径path是以文件结尾
let path = require('path');
console.log(path.dirname('F:/A_class/node/fs.js')); //F:\A_class\node
分析:返回的结果是当前文件所在的文件夹的路径。
2.path.basename(path);
01.传入的路径path是以文件夹结尾
let path = require('path');
console.log(path.basename('F:/A_class/node')); //node
分析:得到的是最后一个文件夹名。
02.传入的路径path是以文件结尾
let path = require('path');
console.log(path.basename('F:/A_class/node/fs.js')); //fs.js
分析:得到的是最后一个文件名。
3.http模块
1.引入http模块和创建服务器 http.createServer();
//引入http模块
let http = require('http');
//创建自己的服务器 (返回的是一个对象)
let server = http.createServer();
2.监听服务器
//监听服务器 (对象调on方法)
server.on('request',(req,res)=>{ //req-->request:请求 res-->response:响应
res.end('响应给客户端的内容');
})
分析:客户端一发起请求,就会调用 (req,res)=>{ } 这个函数,然后通过res.end()向客户端响应数据。
3.设置服务器端口
注意:同一电脑上可以启动多个服务器,但是每个服务器的端口号不要相同。
//设置服务器端口,如果服务器启动,执行回调函数(该函数可省略)
server.listen(8080,()=>{
console.log('服务器启动成功。。。');
});
//总的模板就是这样
let http = require('http');
let server = http.createServer();
server.on('request',(req,res)=>{
res.end('响应给客户端的内容');
})
server.listen(8080,()=>{
console.log('服务器启动成功。。。');
});
4.res.end() 数据类型是字符串或者Buffer
如果客户端要接收到的是字符串的形式。可以用到 JSON.stringify():把对象转换成JSON型的字符串。
res.end(JSON.stringify({
code: 1,
data: '登录成功'
}))
5.避免响应给客户端的内容乱码
01.如果响应给客户端的数据是JSON类型的字符串,为避免中文乱码:
res.writeHead(200, {'Content-Type': 'application/json'});
02.如果响应给客户端的数据是html文件,为避免中文乱码:
res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
5.req.url 路由(端口号后面的部分就是路由:req.url)
6.浏览器地址栏输入的地址不一样,向请求服务器请求的页面就不一样怎么写?
利用req.url == 设置的路由 来判断用户是想请求什么页面,从而返回给客户端什么页面
server.on('request', (req, res) => {
if (req.url == '/') {
res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
fs.readFile('./index.html', (err, data) => {
if (!err) {
res.end(data);
}
});
} else if (req.url == '/login') {
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify({
code: 1,
data: '登录成功'
}));
}else{
res.end('111');
}
})
6.本地自己创建的服务器怎么访问?
注意:127.0.0.1 / localhost :本地
01.http://127.0.0.1:8080
02.http://localhost:8080
03.http://192.168.12.158:8080
总的代码就是:
let fs = require('fs');
let http = require('http');
let server = http.createServer();
server.on('request', (req, res) => {
if (req.url == '/') {
res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
fs.readFile('./index.html', (err, data) => {
if (!err) {
res.end(data);
}
});
} else if (req.url == '/login') {
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify({
code: 1,
data: '登录成功'
}));
}else{
res.end('111');
}
})
server.listen(8080, () => {
console.log('服务器启动成功。。。');
});
2.第三方模块:别人写好的,我们直接拿过来用。+ npm相关指令
1.md5 加密模块 需要下载
npm:node package manager 也叫 node包管理器
npm init -->初始化项目,会产生一个配置文件:package.json
npm install md5 --save 或者 npm i md5 下载md5模块
如果要下载指定版本的:
npm install md5@版本号 --save
npm uninstall 模块 : 卸载某个模块
npm undate 模块:更新某个模块
let md5 = require('md5');
console.log(md5('message')); //传什么就对什么进行加密
3.自定义模块:自己写的
导出:
let info = {
stuname:'花花',
age:20,
sayname(){
return this.stuname;
}
}
module.exports = info;
导入:
let info = require('./md5.js');
console.log(info); //{ stuname: '花花', age: 20, sayname: [Function: sayname] }
console.log(info.sayname());//花花
4.服务器除了自己写,还可以用他人写的eg:Apach,Nginx
这两个服务器默认端口号都是 80
注意:
http协议:默认端口号是 80
https协议: 默认端口号是 443
如果用的是默认端口号,浏览器解析的适合会自动把端口号省略掉。
当把上面两个服务器启动一个之后:
也可以访问WWW下的其它文件夹: