您的位置:首页 > Web前端 > Node.js

node.js的多版本安装,模块化导出导入以及node实现服务器的功能

2020-06-04 05:08 591 查看

node的使用

node多版本安装方式:

  • 卸载已有的node.js
  • 下载nvm
  • 在c盘下创建目录dev,dev里面创建两个子目录nodejs和nvm;把下载的nvm包解压到dev中的nvm包里,此时你会看到此包有一个install.cmd,右击以管理员身份运行,直接回车,生成一个文件,另存为setting.txt到当前目录,打开此文件修改里面的root:nvm的目录路径(C:\dev\nvm)和path:path的目录路径(c:\dev\nodejs)
  • 配置nvm和node的环境变量 系统属性下->高级设置->环境变量->新建NVM_HOME(属性值为nvm的文件目录路径C:\dev\nvm)->新建NVM_SYMLINK(属性值为nodejs的文件目录路径c:\dev\nodejs)->打开path,向里面添加%NVM_HOME%;%NVM_SYMLINK%;
  • nvm常用的命令 nvm list 查看当前安装的node所有的版本
  • nvm install node版本号 安装指定版本的node
  • nvm uninstall node版本号 卸载指定版本的node
  • nvm use node版本号 选择指定版本的node
  • 终端直接输入node后回车,进入node运行环境;使用.exit退出运行环境
  • 执行指定的js脚本文件需要进入该文件的目录下,终端输入node 要执行的js脚本名称.js即可
  • node模块化开发(commonJS)

    • 非模块化开发的缺点:命名冲突/文件依赖
    • 模块化相关规则 如何定义模块:一个js文件就是一个模块,模块内部的成员都是相互独立的
    • 模块成员的导出和引入

    自定义模块

    模块导出和引入的第一种方式(常用)

    • 1.js (导出)
    var sum = function(a,b){
    return parseInt(a)+parseInt(b);
    }
    //导出模块成员
    exports.sum=sum;
    • 2.js (引入)
    var module = require('./1.js');
    console.log(module.sum(12,13));

    模块导出和引入的第二种方式

    • 1.js (导出)
    var sum = function(a,b){
    return parseInt(a)+parseInt(b);
    }
    //导出模块成员
    module.exports=sum;
    • 2.js (引入)
    var module = require('./1.js');
    console.log(module(12,13));

    模块导出和引入的第三种方式

    • 1.js (导出)
    var flag = 123;
    global.flag =flag;
    • 2.js (引入)
    require('./1.js');
    console.log(global.falg);

    系统核心模块

    • fs 文件操作
    • http 网络操作
    • path 路径操作
    • querystring 查看参数解析
    • url url解析

    node初步实现服务器的功能

    const http = require('http')
    let server = http.createServer();
    server.on('request',(req,res)=>{
    res.end('hello');
    });
    server.listen(3000,function(){
    console.log('服务器已启动...');
    });
    • 简写形式
    http.createServer((req,res)=>{
    res.end('hello');
    }).listen(3000,()=>{
    console.log('服务器已启动...');
    })

    node实现静态资源服务器的实现

    node.js处理请求路径的分发

    const http = require('http')
    http.createServer((req,res)=>{
    if(req.url.startsWith('/index')){
    res.write('hello');
    res.end("ok");
    }else if(req.url.startsWith('/about')){
    res.end('about');
    }else{
    res.end('no content');
    }
    }).listen(3000,()=>{
    console.log('服务器已启动...')
    })

    node响应完整的页面

    const http = require('http')
    const path = require('path')
    const fs = require('fs')
    http.createServer((req,res)=>{
    fs.readFile(path.join(__dirname,'req.url'),(err,fileContent)=>{
    if(err){
    res.writeHead(404,{"content-Type":'text/plain;charset:utf8'});
    res.end("页面丢失了");
    }else{
    res.end(fileContent);
    }
    })
    }).listen(3000,()=>{
    console.log('服务器已启动...')
    })

    node实现动态资源服务器的实现

    get参数处理

    使用url.parse.query的方式获取get请求参数

    • 编写处理针对http://localhost:3000?username=‘zs’&&password=123这个get请求路径处理参数
    const http = require('http')
    const url = require('url')
    
    http.createServer((req,res)=>{
    let obj = url.parse(req.url,true);//此处的第二个参数的true表示将query的内容转化为对象
    res.end(obj.query.username+"=============="+obj.query.password)
    }).listen(3000,()=>{
    console.log('服务器已启动...');
    })

    post参数处理

    使用querystring.parse的方式将参数数据转为对象,进而处理

    const http = require('http')
    const querystring = require('querystring')
    
    http.createServer((req,res)=>{
    if(req.url.startsWith('/login')){
    let pdata='';
    req.on('data',(chunk)={//数据读取部分触发的事件
    pdata +=chunk;
    })
    req.on('end',()=>{//数据处理完成之后触发的事件
    let obj = querystring.parse(pdata);//将数据转化为对象
    res.end(obj.username+"======"+obj.password);
    });
    }
    }).listen(3000,()=>{
    console.log('服务器已启动...');
    })
    • 实现一个登录功能的服务器端的案例代码
    • 服务器端代码如下
    const http = require('http')
    const url = require('url')
    const querystring = require('querystring')
    http.createServer((req,res)=>{
    if(req.url.startsWith('/login')){
    if(url.method == 'GET'){
    let param = url.parse(req.url,true).query;
    if(param.username == 'admin' &&param.password == '123'){
    res.end('GET success');
    }else{
    res.end('GET fail');
    }
    }
    if(url.methos == 'POST'){
    let pdata='';
    req.on('data',(chunk)={//数据读取部分触发的事件
    pdata +=chunk;
    })
    req.on('end',()=>{//数据处理完成之后触发的事件
    let obj = querystring.parse(pdata);//将数据转化为对象
    if(obj.username =='admin' && obj.password == '123'){
    res.end('post success');
    }else{
    res.end('post fail');
    }
    });
    }
    }
    
    }).listen(3000,()=>{
    console.log('服务器已启动...');
    })
    • 页面代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    </head>
    <body>
    <form action='http://loaclhost:3000/login' method='post'>
    用户名:<input type="text" name="username"><br/>
    密  码:<input type="password" name="password"><br/>
    <input type="submit" name="提交">
    </form>
    </body>
    </html>
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: