• nodejs 模块


    目录

    __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()

    这是异步的。

    1. let fs = require('fs');
    2. fs.readFile('./index.html',{encoding:'utf-8'},(err,data)=>{
    3. if(!err){
    4. console.log(data);
    5. }
    6. });

    分析:{encoding:'utf-8'} 这个参数可以省略,字符编码的意思。 

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

    这是异步的。

    fs.writeFile(path ,data,callback(err)) 如果文件存在,该方法写入的内容会覆盖旧的文件内容,不存在就创建一个新的文件。

    注意:如果不要覆盖掉以前的,就要利用fs.writeFile省略的第3个参数:

    1. let fs = require('fs');
    2. fs.writeFile('./a.txt','你好啊',{flag:'a'},(err)=>{
    3. if (!err) {
    4. console.log(666);
    5. }
    6. });

    分析:参数 {flag:'a'} 的意义就是不覆盖掉以前的,直接在以前的后面写。

    eg:以前的a.txt文件内容为:花花是美丽女孩。现在是:花花是美丽女孩。你好啊。

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

    这是异步的。

    注意:一次性只能创建一个文件夹,一次性创建多个会报错。

    1. // 导入fs模块
    2. let fs = require('fs');
    3. fs.mkdir('./public/css',(err)=>{
    4. if(!err){
    5. console.log(666);
    6. }else{
    7. console.log('出错了');
    8. }
    9. });
    10. //出错了,一次性创建了两个文件夹 ./public/css (public和css都没创建过)
    1. // 导入fs模块
    2. let fs = require('fs');
    3. fs.mkdir('./public',(err)=>{
    4. if(!err){
    5. console.log('创建成功',666);
    6. }else{
    7. console.log('出错了');
    8. }
    9. });
    10. //创建成功 666

    注意:如果想一次性创建多个目录,就用fs.mkdir省略的 第二个参数{recursive:true}

    1. // 导入fs模块
    2. let fs = require('fs');
    3. fs.mkdir('./upload/hh',{recursive:true},(err)=>{
    4. if(!err){
    5. console.log('创建成功',666);
    6. }else{
    7. console.log('出错了');
    8. }
    9. });
    10. //创建成功 666

    分析: fs.mkdir省略的 第二个参数 {recursive:true} 可以让一次性创建多个目录。

    04. fs.copyFileSync(要copy的文件,copy到新的文件路径); 

    要copy的文件:是前端发送给后端的文件,在前端电脑上保存的文件

    后端接收:let clientData = ctx.request.files

    copy到新的文件路径(包括新的文件的名字)):

    1. let newimgpath = path.dirname(__dirname)+`/public/upload/${path.basename(clientData[0].filepath)}`
    2. fs.copyFileSync(clientData[0].filepath,newimgpath);

    2.path模块

    1.path.dirname(path)

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

    如果 分割符是 \ ,则返回本第磁盘(意义不大)

    1. let path = require('path');
    2. console.log(path.dirname('F:\A_class\node')); //F:

     如果分隔符是 / ,则返回

    1. //js文件中
    2. let path = require('path');
    3. 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是以文件结尾

    1. let path = require('path');
    2. console.log(path.dirname('F:/A_class/node/fs.js')); //F:\A_class\node

    分析:返回的结果是当前文件所在的文件夹的路径。 

    2.path.basename(path);

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

    1. let path = require('path');
    2. console.log(path.basename('F:/A_class/node')); //node

    分析:得到的是最后一个文件夹名。

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

    1. let path = require('path');
    2. console.log(path.basename('F:/A_class/node/fs.js')); //fs.js

    分析:得到的是最后一个文件名。 

    3.http模块

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

    1. //引入http模块
    2. let http = require('http');
    3. //创建自己的服务器 (返回的是一个对象)
    4. let server = http.createServer();

    2.监听服务器

    1. //监听服务器 (对象调on方法)
    2. server.on('request',(req,res)=>{ //req-->request:请求 res-->response:响应
    3. res.end('响应给客户端的内容');
    4. })

    分析:客户端一发起请求,就会调用 (req,res)=>{  } 这个函数,然后通过res.end()向客户端响应数据。

     3.设置服务器端口

    注意:同一电脑上可以启动多个服务器,但是每个服务器的端口号不要相同

    1. //设置服务器端口,如果服务器启动,执行回调函数(该函数可省略)
    2. server.listen(8080,()=>{
    3. console.log('服务器启动成功。。。');
    4. });
    1. //总的模板就是这样
    2. let http = require('http');
    3. let server = http.createServer();
    4. server.on('request',(req,res)=>{
    5. res.end('响应给客户端的内容');
    6. })
    7. server.listen(8080,()=>{
    8. console.log('服务器启动成功。。。');
    9. });

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

    如果客户端要接收到的是字符串的形式。可以用到 JSON.stringify():把对象转换成JSON型的字符串。

    1. res.end(JSON.stringify({
    2. code: 1,
    3. data: '登录成功'
    4. }))

    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 == 设置的路由  来判断用户是想请求什么页面,从而返回给客户端什么页面

    1. server.on('request', (req, res) => {
    2. if (req.url == '/') {
    3. res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
    4. fs.readFile('./index.html', (err, data) => {
    5. if (!err) {
    6. res.end(data);
    7. }
    8. });
    9. } else if (req.url == '/login') {
    10. res.writeHead(200, {'Content-Type': 'application/json'});
    11. res.end(JSON.stringify({
    12. code: 1,
    13. data: '登录成功'
    14. }));
    15. }else{
    16. res.end('111');
    17. }
    18. })

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

    注意:127.0.0.1 / localhost :本地
    01.http://127.0.0.1:8080

    02.http://localhost:8080

    03.http://192.168.12.158:8080 

    总的代码就是:

    1. let fs = require('fs');
    2. let http = require('http');
    3. let server = http.createServer();
    4. server.on('request', (req, res) => {
    5. if (req.url == '/') {
    6. res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
    7. fs.readFile('./index.html', (err, data) => {
    8. if (!err) {
    9. res.end(data);
    10. }
    11. });
    12. } else if (req.url == '/login') {
    13. res.writeHead(200, {'Content-Type': 'application/json'});
    14. res.end(JSON.stringify({
    15. code: 1,
    16. data: '登录成功'
    17. }));
    18. }else{
    19. res.end('111');
    20. }
    21. })
    22. server.listen(8080, () => {
    23. console.log('服务器启动成功。。。');
    24. });

    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 模块:更新某个模块

    1. let md5 = require('md5');
    2. console.log(md5('message')); //传什么就对什么进行加密

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

    导出:

    1. let info = {
    2. stuname:'花花',
    3. age:20,
    4. sayname(){
    5. return this.stuname;
    6. }
    7. }
    8. module.exports = info;

    导入: 

    1. let info = require('./md5.js');
    2. console.log(info); //{ stuname: '花花', age: 20, sayname: [Function: sayname] }
    3. console.log(info.sayname());//花花

    4.服务器除了自己写,还可以用他人写的eg:Apach,Nginx

     

    这两个服务器默认端口号都是 80 

    注意:

    http协议:默认端口号是  80

    https协议: 默认端口号是 443

    如果用的是默认端口号,浏览器解析的适合会自动把端口号省略掉。

    当把上面两个服务器启动一个之后:

     也可以访问WWW下的其它文件夹:

  • 相关阅读:
    数据库------E-R图和关系模型
    Monkey测试
    LeetCode(力扣)435. 无重叠区间Python
    layui表头多出一列(已解决)
    iOS ------ autoreleasePool
    《Linux-常见指令详解》
    自定义弹窗dom元素的添加与使用的js文件
    计网ppt标黄知识点整理第(4)章节——谢希仁版本、期末复习自用
    【HBuilder X】解决HBuilder X内置浏览器显示过大影响使用
    LeetCode每日一题(1233. Remove Sub-Folders from the Filesystem)
  • 原文地址:https://blog.csdn.net/weixin_47075145/article/details/126590110