当前位置: 首页 > 工具软件 > Node GH > 使用案例 >

node.js用法

司空浩邈
2023-12-01

node.js的基础语法

node中没有全局对象window,只有global全局对象

  • 当前文件所在的文件夹路径

    cnosole.log(__dirname)
    
  • 当前文件的路径

    console.log(__filename)
    

node.JS模块化
- node遵循模块化的开发

  1. 导出:exports 直接导出这个对象

  2. module.exports 直接导出后面等于号的内容

  3. exports和module.exports 都是导出模块

    本质上就是一个对象,使用的方法:公司里面是有严格规定的
    导入:require() 当前的文件中一定要加上“./”表示当前
    如果不加其他的导出,默认的是去找module.exports中的内容
    -在node中没有全局作用域,有的只是模块作用域

NPM

  • 基于nodejs的全球最大的包管理
    • nodejs 6.0以上的版本直接用就OK,自动集成了npm
    • nodejs 6.0以下的版本需要自己手动安装npm
  • npm包管理工具 怎么用?
    • 中央服务器 在国外,网速不好的自己去下载一个淘宝镜像(npm的同步包管理,跟npm一样,但是服务器在国内)
    • npm -v 可以检测电脑是否安装了npm
    • 初始化
      • npm init
      • 填写完表单 生成一个文件 package.json文件
        • package.json 项目依赖,项目信息文件,项目配置文件
          • 新手学会看配置文件等于先了解这个项目
          • 老油条打包项目会节省网络以及资源
    • 下载
      • npm install 资源名 --save 下载资源 如果没有指定版本号,默认安装最新版
        • npm i 资源名 (简写)
        • npm install --save jquery@1.11.3 下载指定版本
        • 安装到node_modules文件夹中
          • package.json的描述和node_modules文件夹中的内容是完全对应
          • 如果上传项目,clone别人的项目,都是没有node_modules文件夹的
        • npm install 可以根据package.json文件中的依赖项自动安装需要的包
        • 参数
          • –save
            • 使用淘宝镜像安装,不会去更新package.json文件,不管你在使用npm还是cnpm都最好把–save这个参数加上去
          • –g
            • 表示的是全局安装 安装在node安装目录的node_modules文件夹中,根据需求使用
          • –save和–g不要同时添加
        • require(http) 引入一个模块
          • 找自己文件夹中的node_modules文件夹的http模块,如果没有,再去找node安装目录node_modules文件夹中的http模块
    • 卸载
      • npm uninstall jquery
        • npm uni (简写)
        • 参数
          • –save -g
    • npm其他基本命令
      • npm init npm初始化出配置文件的
      • npm update 资源名 更新资源
      • npm ls 查看安装的模块
  • cnpm
    • npm i -g cnpm --registry=https://registry.npm.taobao.org
    • 安装了淘宝镜像以后,以后所有的npm直接换成cnpm即可
      • cnpm install
      • cnpm install jquery --save
      • cnpm install jquery@1.11.3 --save
      • cnpm install jquery -g
    • 淘宝镜像:服务器在中国

express

  • express 快速 基于nodejs的后台框架

  • 引入

    var express = require("express");
    var app = express();
    
  • 传输

    • 字符串:
      • end只能写字符串 中文要设置响应头
      • send 直接就能自动帮你设置了
    • 数字:
      • end和send都不能写数字
    • 对象:
      • end 必须要转换成json字符串
      • send 自动帮你转化 可以直接传递
  • http中url的地址是不区分大小写的,但是,原生node做不到,express就很简便解决了

  • 所有的请求,get、post请求都是封装的方法,直接调用即可

    • 路由可以传递参数
      • 正则

        • 关键:转义、分组
        app.get(/^\/student\/([\d]{10})$/, (req, res) => {
            console.log(req.params[0])
            res.send(`学生信息,学号${req.params[0]}`)
        })
        
      • 变量

        • 关键:使用冒号:
        app.get("/teacher/:gh", (req, res) => {
            res.send(`老师的工号${req.params.gh}`)
        })
        
  • http的请求有多少种? 8中,常用的就只有get,post

    • get

      • get的参数
        • req.query 得到一个参数组成的对象
    • post

      • post的参数
        • 必须依靠body-parser的插件
          1. 下载body-parser的插件
          2. 引入
          3. 设置格式
          4. 直接在req.body中
    • 用同一个地址。get去读取某个页面,post作为请求,RESTful路由设计

    • 通过一个接口,http请求方式的不同,效果也不同

    • /

    • get 读取的操作

    • add 增加

    • post 修改

    • delete 删除

    • ejs 在express中,更推荐去使用模板引擎

      • express里面是自动集成了ejs
      const express = require("express");
      const app = express();
      
      // express里面是自动集成了ejs
      
      // 设置模板引擎
      app.set("view engine", "ejs");
      //用get读页面
      app.get("/", (req, res) => {
          res.render("form")
      })
      
      //用post去完成提交
      app.post("/", (req, res) => {
          res.send("OK")
      })
      

中间件

  • 以下两个请求会造成请求冲突,因此需要解决问题

    app.get("/:username/:id", (req, res) => {
        console.log('1')
        res.send(req.params.username)
    })
    app.get("/admin/login", (req, res) => {
        console.log('2');
        res.send("管理员登录")
    })
    
  • 解决方式1

    • 交换两个请求的位置

      app.get("/admin/login", (req, res) => {
          console.log('2');
          res.send("管理员登录")
      })
      app.get("/:username/:id", (req, res) => {
          console.log('1')
          res.send(req.params.username)
      })
      
  • next,继续往下执行

    • next就是中间件的意思
    • 如果用了中间件以后,就不要去做响应结束了
    app.get("/:username/:id", (req, res, next) => {
        console.log('1')
        next()
    })
    app.get("/admin/login", (req, res) => {
        console.log('2');
        res.send("管理员登录")
    })
    

cookie session

  • cookie

    • http的无状态协议 基于express中的cookie如何使用
    • 公司使用的场景越来越少 cookie每次请求都携带,占据内存,逐渐都被H5替代了
      • 公司如果使用cookie,都只是为了兼容性
    • cookie是明文的, 用户可以随意看到
    • cookie可以删除, 可以篡改
    • cookie可以被攻击
    • cookie存储量很小, 未来肯定会被H5的storage替代, IE9以上
    • 第一次发送请求的时候肯定是没有的, 第一响应的时候给你携带, 下一次请求的时候, 和request一起发送出去
    • express中的cookie 在req和res中都有
    • 设置cookie在响应中设置,只要设置了,下一次访问的时候就会携带
    • 访问cookie就是在请求中
    const express = require("express");
    const cookieParser = require("cookie-parser");
    const app = express();
    app.use(cookieParser());   //引入cookie中间件
    
    app.get("/", function(req, res) {
        // console.log('Cookies: ', req.cookies)
    
        // 在响应中设置,返回给浏览器,然后存起来,下一次访问的时候,请求肯定就带上了cookie
        // res.cookie(key,value,{cookie存储的描述对象})
        res.cookie("huanglaoshi", "huazhuang", { maxAge: 900000, httpOnly: true });
    
        res.send(req.cookies);
    })
    
    app.listen(3000);
    
  • session

    • 基于cookie的一种加密的
    • session基于cookie的
      • cookie是一个明文的
      • session为了跟cookie摆脱关系,暗文的
    • session的设置和获取都是在req中

JSONP

  • 跨域的方式:
    • 设置请求头 一般在公司只是测试用下
    • 代理服务器
    • jsonp
  • 只能支持get方式
  • jsonp为什么不是真正意义上的ajax
  • 完成前后端的通信
    • 前台可以发送数据给后台,前台可以拿到后台的数据
  • 完成前后端的数据交互
 类似资料: