0

    Node.js(一)

    2023.07.13 | admin | 116次围观

    一、什么是Node.js

    Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时。

    node.js使用事件驱动、非阻塞I/O模型使得其轻量、高效。

    node.js的包生态系统,npm是世界上最大的开源库生态系统。

    二、Node.js能做什么三、使用命令行解析js文件

    写一个简单的js文件

    var str = 'hello node';
    conole.log(str);

    随意命名js已经编码,到浏览器又出现中文,比如hello.js。(注意,不能使用node.js命名,否则会打开文本而不会解析执行)

    然后在文件存放处打开命令行,使用node指令执行即可:

    四、使用Node构建web服务器

    我们已经知道Node可以解析js文件了,而js也可以进行web服务器搭建,所以我们只需要使用Node.js提供的相关api来搭建服务器,再用命令行去解析执行即可。

    //类似我们需要使用某些对象一样,需要使用关键字进行New,在Node.js中我们使用require()方法进行模块加载(Node中的模块就相当于具有特殊功能的对象)
    //要构建一个web服务器需要使用http模块
    var http = require('http');

    //使用http模块创建webServer
    var server = http.createServer();

    //设置端口号
    server.listen(8888,function(){
        console.log("端口号启用成功!");
    });

    //服务器request事件:请求时触发
    server.on('request',function(request,response){
        console.log("已经收到请求!"+'请求路径为:'+request.url);//一些请求信息
        response.write("雷好,我系~渣渣辉!");//响应
        response.end("该干嘛干嘛去");//告知浏览器响应结束,不必等待
    });

    console.log("webServer at localhost://88888");

    然后我们打开浏览器输入:localhost://8888或127.0.0.1://8888就可以访问了。

    总结一下:

    五、Node.js中的JavaScript1、核心模块

    Node.js为JavaScript提供了很多服务器级别的api,这些api绝大多数都被包装到了一个具名的核心模块中,比如:

    文件操作的fs(File System)模块、http服务创建的http模块、路劲操作的path模块、操作系统信息的os模块等。

    而我们需要使用这些核心模块就需要使用require()方法进行获取。

    2、自定义模块

    Node.js中的模块有三种:

    其中用户自定义的模块又叫文件模块,也就是那些js文件。

    我们知道,在命令行中node指令只能编译执行一个js文件,但是我们的项目不可能只有一个js文件,同样的,js文件也是模块,所以我们需要在某个文件中使用require()方法解析执行文件模块。

    比如我现在有以下三个js文件:

    //a.js文件
    console.log('a start');
    require('./b.js');//解析执行b.js
    console.log('a end');

    //b.js文件
    console.log('b start');
    require('./c.js');//解析执行c.js
    console.log('b end');

    //c.js文件
    console.log('CCCCCC');

    执行结果如下:

    值得注意的点:

    既然每个文件中的变量互不影响,那么如果我们需要使用到某个文件内部的变量时又该如何获取呢?其实require()方法除了解析执行文件模块之外还能返回文件模块自带的exports对象,该对象默认为空{}。

    所以我们只需要在文件模块中将需要到处的值传入exports对象中即可:

    var b = require('./b');//加载b文件
    console.log(b);//输出b模块导出的对象

    var str = '雷好,我系渣渣辉';
    function add(x,y){
      return x+y;
    }
    exports.str = str;
    exports.add = add;

    执行:

    六、响应内容的类型Content-Type

    上文中我们响应的中文可能在浏览器中显示是乱码,这是因为Node.js默认的响应类型是utf-8,而浏览器不知道js已经编码,到浏览器又出现中文,如果浏览器默认编码不是utf-8就会产生乱码。

    response对象在响应的时候可以设置相关参数,比如响应头,响应内容的类型,而编码方式的信息就由Content-Type来设置。

    //设置响应头参数。响应类型为普通文本,编码方式为utf-8
    response.setHeader('Content-Type','text/plain;charset=utf-8');

    示例:

    var http = require('http');
    var server = http.createServer();
    server.listen(8888);

    //服务器request事件:请求时触发
    server.on('request',function(request,response){
        var url = request.url;
        var str = '

    如果你看得清我,说明我没有乱码!

    '

        if(url == '/plain'){
            response.setHeader('Content-Type','text/plain;charset=utf-8');//返回普通文本
        }else if(url == '/html'){
            response.setHeader('Content-Type','text/html;charset=utf-8');//返回html文本
        }else{
            str = 'please use url /plain or /html and get the response!'
        }
        response.end(str);
    });

    console.log("webServer running at localhost://88888");

    七、fs核心文件

    fs全称File System,用于操作文件,基本的两个功能为为读文件和写文件。

    1、使用fs读文件:readFile()

    //使用require方法加载fs模块
    var fs = require('fs');
    fs.readFile('hello.js',function(error,data){
       if(error){
           console.log('文件读取失败!');
           return;
       }
       console.log(data.toString());
    });

    2、使用fs写文件:writeFile()

    var fs = require('fs');
    fs.writeFile('hello.txt','大噶好,I\'m 渣渣辉',function(error){
        if(!error){
            console.log("文件写入成功!");
        }else{
            console.log("文件写入失败!");
        }
    });

    使用fs.writeFile()方法写入文件。第一个参数为文件地址及文件名,第二个参数为文件的文本信息,可以是字符串,也可以是二进制数据,第三个参数为回调函数。

    3、案例:利用fs文件的读写操作实现文件复制

    逻辑很简单,将读取的文件数据写入新的文件中即可

    var fs = require('fs');

    fs.readFile('jinx.jpeg',function(error,data){
        if(error){
            console.log('文件读取失败!');
        }else{
            //将读取的数据写入新的文件中
            fs.writeFile('jinx(copy).jpeg',data,function(error){
                if(!error){
                    console.log("文件写入成功!");
                }else{
                    console.log("文件写入失败!");
                }
            });
        }   
    });

    八、案例:使用Node加载index.html并实现简单页面跳转

    由于文件过多这里不再展示,假设这是一个本地项目

    我们希望使用Node.js来搭建服务器,并在服务器上运行我们的项目。

    大家服务器很简单,关键点在于我们需要根据请求路劲来加载相应的资源文件,这些上面的案例都能实现。类似这样:

    我们根据request.url使用fs核心模块来加载文件,并设置相应的Content-Type在浏览器中正确裁入文件类型。

    关注后端技术精选,每天推送优质好文

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论