• 【个人笔记】《知了堂》express模块


    NPM  包管理器

      Node package module  ==>简称npm

      类似的bower

    安装express

      1.全局Npm install express -g 

      2.项目中安装

    项目中安装

    Npm init 初始化项目
    Npm init -y  初始化简写 不用输入这些项目描述
    会产生一个package.json文件

    如果项目迁移  只需要拷贝项目文件 及 package.json文件 不需要拷贝下载的模块包
    只需要运行 npm install 会自动安装所有的依赖

    项目 npm install express@3 --save-dev

            Npm intstall 包名字@版本号 --save-dev

           Npm intstall 包名字@版本号 --save

      --save-dev 或者--save 安装到package.json作为依赖

      --save-dev会保存在devDependencies里的是开发用的,

      --save   会保存在dependencies里的是开发完上线时用的

    构建项目目录

      

    • Routes
    • Views
    • Public
      • Css
        • Style.css
      • Images
      • Js
      • Index.html
      • form.html
    • Dist
    • App.js
    • Package.json
    • Node_modules

    App.js中使用es6语法

            // 要使用es6 先使用严格模式 "use strict";
    	// let 块级作用域的局部变量
    	// var 在es6中全局
    	// const 常量 定义后不允许修改
    
        
    "use strict";
    const express=require("express");
    // 要使用es6 先使用严格模式 "use strict";
    // let 块级作用域的局部变量
    // var 在es6中全局
    // const 常量 定义后不允许修改
    const app=express();
    app.listen(8888,function(){
    console.log("服务器启动,端口是8888")
       

    配置服务器 app.js

    express框架配置,内容有哪些

    访问日志,详细记录服务器执行了哪些操作,当发生错误时可以记录下来

      处理请求,get,post配置一下怎么去处理
      路由配置
      静态资源路径配置
      错误报告
      express的配置分 set设置,use使用,所有express的使用信息都写在configure里面

    "use strict";
    const express=require("express");
    // 要使用es6 先使用严格模式 "use strict";
    // let 块级作用域的局部变量
    // var 在es6中全局
    // const 常量 定义后不允许修改
    const app=express();
    app.configure(function(){
        app.use(express.logger("dev"));//开发者日志
        app.use(app.router);//路由
        app.use(express.static(__dirname+"静态地址"));//设置静态资源路径。__dirname根目录
        app.use(express.favicon(__dirname+"图标"));//网页小图标
        app.use(express.errorHandler());//打印错误信息
    })
    
    app.set("port",8888);//设置端口
    app.listen(app.get("port"),function(){
        console.log("服务器启动,端口是"+app.get("port"));
    })
       

    数据类型请求get

    • 页面提交数据form.html 

      • <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <meta http-equiv="X-UA-Compatible" content="ie=edge">
            <title>表单</title>
        </head>
        <body>
            <!-- <form action="提交地址 url" method="方法 提交表单的方式 get/post"> -->
            <form action="login" method="get">
                <h1>登陆</h1>
                用户名:<input type="text" name="userName">//必须加那么值
                密码:<input type="password" name="pwd">
                <input type="submit">
            </form>
        </body>
        </html>
                
        
    • 服务器app.js拦截请求

      • app.get("/拦截的地址",function(req,resp){
        console.log("请求进来了")
        })
    • 获取form.html传过来的数据 并且做判断

        • app.get("/login",function(req,resp){
              console.log(req.query.userName)
              // 所有的数据保存在请求对象上的query
              let userName=req.query.userName;
              let pwd=req.query.pwd;
              if(userName=="admin"&& pwd==123456){
                  resp.send("<h1>你是vip 进入吧</h1>");
                  //通过send返回一个值
              }else{
                  resp.send("<h1 style='color:red'>对不起,滚吧</h1>");
              }
                  console.log("请求进来了")
          })

        1、Send(“ok”) 返回数据

        2、Redirect(“index.html”) 重定向页面,路径变

          还可以跳转到百度

          resp.redirect("http://www.biadu.com");

        3.Sendfile(“相对路径”)  发送页面的意思,路径不变

          resp.sendfile("./public/index.html");//发送页面,路径不变

    数据类型请求post

    • post和get的区别
      • 第一个区别:在地址栏上表现的不一样,get输入的值会现在在url上,也就是说值是通过url来传递,演示去掉name属性,那用户名就不能传递给服务器,那我们在服务器里面应用表单的时候就要给表单域加上name属性,因为要知道是哪个输入框输入的值,并且服务器要把这些值拿到进行一个处理,如果没有name属性里就根本拿不到。
      •  第二个区别:哪个更加安全→post,不会把表单的值现在url地址栏,所以安全性更高
      • 第三个区别:get请求的值有长度限制,超出的就会做一个截取,但是太长也会增加服务器处理的负担,post没有限制,所以基本不用考虑
      •  第四个区别:get请求只能传输字符类的值,post可以上传文件类型的
      • 第五个区别:get是 通过把整个url传输的方式,post会进行拆分,后台会进行整合,通过bodyparser,这样就很安全。

    配置express

    app.configure(function(){
        app.use(express.logger("dev"));//开发者日志
        app.use(express.bodyParser());//bodyparser进行post请求处理
        app.use(express.methodOverride());//方法重写的方式 协助处理post请求模块,把所有非get请求转化为            
        post请求,http请求只会讨论get,post,(put,delete是通信这些才会用到不讨论)
        app.use(app.router);//路由
        app.use(express.static(__dirname+"/public"));//设置静态资源路径。__dirname根目录
        app.use(express.favicon(__dirname+"/public/images/favicon.png"));//网页小图标
        app.use(express.errorHandler());//打印错误信息
    })
    

    Form.html

    <form action="login.do" method="post">
        <h1>登陆post</h1>
        <!-- 必须加那么值 -->
        用户名:<input type="text" name="userName">
        密码:<input type="password" name="pwd">
        <input type="submit">
    </form>
    

    App.js服务器拦截login.do

    // post请求
    app.post("/login.do",function(req,resp){
        console.log(req.body)
        let userName=req.body.userName;
        let pwd=req.body.pwd;
        if(userName=="admin"&&pwd==123){
            resp.redirect("index.html")
        }else{
            resp.redirect("form.html")
        }
    })

    路由

    (一)Routes新建logingRouter.js
    // 导出get的处理程序
    exports.loginGet=function(req,resp){
        console.log(req.query.userName)
        // 所有的数据保存在请求对象上的query
        let userName=req.query.userName;
        let pwd=req.query.pwd;
    if(userName=="admin"&& pwd==123456){
        // send是返回数据
        // resp.send("<h1>你是vip 进入吧</h1>");
        // redirect 重定向页面 
        // resp.redirect("http://www.biadu.com");
        resp.redirect("index.html");//跳转页面,路径变了
            // resp.sendfile("./public/index.html");//发送页面,路径不变
        }else{
            // resp.send("<h1 style='color:red'>对不起,滚吧</h1>");
            resp.redirect("form.html");
        }
            console.log("请求进来了")
    }
    // 导出post的处理程序
    exports.loginPost=function(req,resp){
        console.log(req.body)
        let userName=req.body.userName;
        let pwd=req.body.pwd;
        if(userName=="admin"&&pwd==123){
            resp.redirect("index.html")
        }else{
            resp.redirect("form.html")
        }
    }

    App.js引入路由文件

      

    const loginRouter=require("./routes/loginRouter");
    

      

    nodejs模块中exports和module.exports的区别

      通过Node.js的官方API可以看到Node.js本身提供了很多核心模块。这些核心模块被编译成二进制文件,可以通过require('模块名')去获取;核心模块具有最高的加载优先级(有模块与核心模块同名时会体现),如:

    var http=require('http')
    var fs=require('fs');
    

      文件模块访问方式通过require('/文件名.后缀') 去访问,文件后缀可以省略;以"/"开头是以绝对路径去加载,以"./"开头和以"../"开头表示以相对路径加载,而以"./"开头表示同级目录下文件,如:

    const ql = require("./db.js")  //本目录下的db.js

       exports和module.exports;提供了外部访问的接口

    (exports和module.exports,是对外暴露文件,再引用,属于文件模块。核心模块由node写好,直接引用就行)

    1. exports 是指向的module.exports 的引用
    2. module.exports 初始值为一个空对象{},所以exports 初始值也是{}
    3. require() 返回的是module.exports 而不是exports
  • 相关阅读:
    openlayers方法总结
    AJAX 数据库实例
    AJAX 请求服务器
    得到XMLHttpRequest对象
    AJAX 简介
    AJAX 服务器端的脚本
    HTTP GET 最多发送100个字符
    AJAX XMLHttpRequest 对象
    Dictionary、ArrayList、Hashtable和数组 Array 的区别
    AJAX 请求实例
  • 原文地址:https://www.cnblogs.com/1542986913Yu/p/7600621.html
Copyright © 2020-2023  润新知