nodejs模块 + __dirname + 访问别人写的服务器方法

目录

__dirname表示什么意思

1.系统模块:底层自带的,直接用

1.fs模块  针对于文件的操作。

01.读取文件 fs.readFile()

02.写入文件(创建文件)  fs.writeFile()

 03.fs.mkdir()   创建一个文件夹

2.path模块

1.path.dirname(path)

01.传入的路径path是以文件夹结尾

02.传入的路径path是以文件结尾

2.path.basename(path);

01.传入的路径path是以文件夹结尾

02.传入的路径path是以文件结尾

3.http模块

1.引入http模块和创建服务器 http.createServer();

2.监听服务器

 3.设置服务器端口

4.res.end() 数据类型是字符串或者Buffer

5.避免响应给客户端的内容乱码

 5.req.url  路由(端口号后面的部分就是路由:req.url)

6.浏览器地址栏输入的地址不一样,向请求服务器请求的页面就不一样怎么写?

6.本地自己创建的服务器怎么访问?

2.第三方模块:别人写好的,我们直接拿过来用。+ npm相关指令

1.md5 加密模块  需要下载

3.自定义模块:自己写的

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下的其它文件夹:

猜你喜欢

转载自blog.csdn.net/weixin_47075145/article/details/126590110