一、加载静态资源(所有静态资源必须要在服务器响应才能看到)

1.什么是静态资源 例如 html css js 图片

2.如何加载?

​ 需要引入文件系统模块fs,使用fs中的readFile方法

引入fs模块

let fs = require('fs')

语法格式: fs.readFile(参数1,参数2)

​ 参数1: 要加载的静态资源

​ 参数2:回调函数

例如:
fs.readFile('/index.html',(参数1,参数2)=>{
  参数1: 错误 err
  参数2: 记载成功的静态资源  data
})
//根据不同的路径加载不同的静态资源

let http = require('http');
//引入fs模块
let fs = require('fs');
let server = http.createServer((req,res)=>{
    //根据不同的路径加载不同的静态资源
    let url = req.url
    if(url == '/index'&& req.method == 'GET'){
       fs.readFile('./index.html',(err,data)=>{
       if(err){
           //能进入这个分支表示有错误
          res.wtite('404');
          res.end();
       }else{
          //能进入这个分支表示没有错误,将加载的数据返回给客户端
           res.write(data);
           res.end();
       }
       })
    }
    if(url == '/login'&& req.method == 'GET'){
       fs.readFile('./login.html',(err,data)=>{
       if(err){
           //能进入这个分支表示有错误
          res.wtite('404');
          res.end();
       }else{
          //能进入这个分支表示没有错误,将加载的数据返回给客户端
           res.write(data);
           res.end();
       }
       })
    }
})
server.listen(8090);
二、处理表单的提交
let http = require("http");
let fs = require("fs");
let urll = require("url"); 
let qs = require("querystringify");
let server = http.createServer((req,res)=>{
    /*
      使用文件系统进行加载html的静态资源(login.html)
      在html文件中有表单
      当表单提交之后,在指定的请求路径中获取表单中传递的信息
    */
   //加载表单的静态资源(也就是加载一个html页面,里边写的是表单代码)
   let url = req.url;
   if(url == "/form" && req.method == "GET"){
     fs.readFile("./form.html",(err,data)=>{
       if(err){
         res.write("404");
       }else{
         res.write(data);
       }
       res.end();
     })
   }

   //处理表单的提交
   if(url == "/dologin" && req.method == "POST"){
    //  console.log("你点击了登录按钮");
    //接收你表单提交过来的信息  用户名 和  密码
    //  如果需要接收表单的信息,我们需要使用一种监听的手段,监听表单中的数据
    /*
        req.addListener(data,function(){})
        参数1:是data  如果参数为data那么就表示开始监听
        参数2:是回调函数

    */
     //声明一个空变量,用于存储每一次监听到的数据
     let datas = "";
     req.addListener("data",(chunk)=>{
        datas += chunk;
     })
     req.addListener("end",()=>{
       //  username=root&pass=123456  =>  {xxx:xxx,xxx:xxx}
       //  let par = urll.parse(url,true);  // 错误的写法!!!
       //  http://localhost:8090/dologin
      
       console.log(datas);
       let obj = qs.parse(datas);
       console.log(obj);
       let username = obj.username;
       let pass = obj.pass;
      //  let pass = xxx;
       console.log(username,pass);
     })
     res.end();
   }
})
server.listen(8090);
三、查询字符串
          查询字符串就是:xxx=xxx&xx=xx
          如果需要解析指定的"查询字符串" 需要解析查询字符串(就是将查询字符串变成对象的过程)
          需要一个模块qs(querystring)模块,我们需要使用这个模块中的parse方法
          qs.parse(参数)  参数就是你要解析的查询字符串

          但是有问题!!qs模块已经被弃用
          解决方案:
            1.删除这个警告
                鼠标悬停到qs模块上,会出现提示,点击那个被标注的连接  不推荐!!
            2.换一个模块
              我们需要使用querystringify的模块
              直接使用会报错,说这个模块没有找到,这个模块不是内置的,我们需要安装
              npm 的使用
                npm是安装模块和依赖的工具
                1.安装模块:
                  在使用安装命令之前,需要先进行对npm初始化
                  npm init --yes  这个命令就是初始化npm
                  初始化之后会在当前的目录中生成一个package.json的文件  非常重要的文件(以后会详细介绍)
                  npm install 模块名
                  可以简写为
                  npm i 模块名
                  默然使用这种方式安装的模块一定是最新的版本
                  按照版本安装
                  npm i 模块名@版本号  例如  npm i jquery@1.3.6
                  如果你安装指定版本的时候,不清楚有哪个版本,可以直接 npm i 模块名@1
                  安装模块之后,会生成一个node_modules的目录,所有安装的模块都会在这个里边
              npm是一个强大的模块安装工具:
                npm可以解决依赖安装
                什么是依赖安装:
                  Aok   ->   B ok   ->   C ok   ->   D ok
                npm  安装  A -> 

              2.卸载模块
                npm uninstall 模块名

            切换下载源:
              npm config set registry https://registry.npm.taobao.org
            查看是否切换成功:
              npm config get registry

            npm的官方网站:https://www.npmjs.com/