npm介绍及跨域问题

一.npm含义

    1.npm

    2.npm包管理工具图表命令大全

    3.npm init -y原理

    4.npm i 包名原理

    5.拓展-moment第三方包使用

二. 全局包与本地包

三.开发依赖与生产依赖

四.跨域

    1.跨域准备

    2.跨域介绍

    3.同源策略

    4.解决跨域

五.跨域解决方案:CORS

一.npm含义

1.npm

npm全称--->(node package manager)

npm有两种含义 :

第一种: 包管理工具node package manager

第二种:npm网站代码托管平台

2.npm包管理工具图表命令大全

 

3.npm init -y原理

作用: 快速初始化包,创建package.json文件

package.json文件 : 项目中用到了哪些依赖包,以及包名、版本号,只要你下载了包,这个文件就会记录你下载哪些包,和下载的版本

4.npm i 包名原理

1.访问npm服务器

2.从npm服务器搜索包

3.搜索到之后,找包的仓库地址

4.下载包到你目录的node_module文件

5.会把包地址放入package.lock.json文件,用于更新提高速度

5.拓展-moment第三方包使用

 moment的官网:Moment官网

 moment中文网:Moment中文网

二. 全局包与本地包

1.本地包: npm i 包名

(1).在哪里执行命令,就在哪个文件夹安装;

(2).只对这个文件夹生效;

2.全局包: npm i 包名 -g

(1).无论在哪里执行命令,都会装到你的C盘根目录;

(2).对整个操作系统生效,任何时候都能使用;

三.开发依赖与生产依赖

下载包的时候,有两种选择:开发依赖与生产依赖(默认情况下,我们所有的包都会选择生产依赖 )

1.开发依赖: 只在开发的时候会用到,到了生产(上线)环境用不上

2.生产依赖:上线之后也需要使用

3.举个例子: 比如房子装修

开发依赖: 装修的时候需要用到工具。 铲子、尺子、水泥、木材

生产依赖:装修完了需要用到:水泥、木材

四.跨域

1.跨域准备

1.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>Document</title>
</head>
<body>
    <button class="btn1">点我发送ajax1</button>
    <button class="btn2">点我发送ajax2</button>

    <script>

        document.querySelector('.btn1').addEventListener('click',function(){
            // 给我们自己nodejs服务器发请求
            let xhr = new XMLHttpRequest()
            xhr.open('get', 'http://127.0.0.1:3000/getList')
            xhr.send()
            xhr.onload = function() {
                console.log(xhr.responseText)
            }
        })

        document.querySelector('.btn2').addEventListener('click',function(){
            //给别人的网易云服务器发请求
            let xhr = new XMLHttpRequest()
            xhr.open('get', 'http://c.m.163.com/nc/article/headline/T1348647853363/0-40.html')
            xhr.send()
            xhr.onload = function() {
                console.log(xhr.responseText)
            }
        })

    </script>
</body>
</html>

2.js页面代码(准备一个app.js文件,搭建nodejs服务器)

//1.导入http模块 
const http = require('http')

//2.创建服务器
const app = http.createServer( (req,res)=>{
    if( req.url === '/getList' ){
        //响应json字符串
        res.end('{"name":"张三"}')
    }
} )

//3.开启服务器
app.listen(3000,()=>{
    console.log('服务器启动成功')
})

3.启动服务器,不出意外的话就是要出意外了

 2.跨域介绍

只要是出现跨域问题,浏览器就会出现一个固定格式(没有之一)的报错信息

Access to XMLHttpRequest at '服务器url地址' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource

跨域:ajax地址与页面地址不同源

ajax地址:跨域只会出现在ajax请求中
页面地址:location.href
不同源:协议名,主机名(ip),端口号 三个完全不一致(逻辑或)
同源:协议名,主机名(ip),端口号 三个完全一致(逻辑与)

3.同源策略

同源策略:协议名,主机名,端口号 三个完全一致(逻辑与)
页面地址:http://127.0.0.1:5000/index.html
ajax2: https://127.0.0.1:3000/abc 不同源,协议名不同
ajax3: https://m.163.com:3000/abc 不同源,主机名不同
ajax1: http://127.0.0.1:3000/abc  不同源,端口号不同
ajax4: http://127.0.0.1:5000/abc  同源

浏览器有同源策略的原因:如果ajax地址和页面地址不同,浏览器就会认为你是向其他服务器发送请求.为了保护你的安装,浏览器就会拒绝介绍其他服务器的数据

4.解决跨域

1.JSONP技术:以前的技术,现在很少使用了
2.CORS技术:后台设置响应头,前端不需要任何处理
3.代理服务器:帮浏览器 转发请求的 服务器
   (1)浏览器给nodejs代理服务器发请求
   (2)代理服务器帮你 转发请求 给目标服务器(网易云)
   (3)目标服务器(网易云)把数据响应给 nodejs服务器
   (4)nodejs服务器把数据 响应给 浏览器

五.跨域解决方案:CORS

CORS :全称cross origin resource share (资源共享)

工作原理: 服务器 在返回响应报文的时候,在响应头中 设置一个允许的header

//1.导入http模块 
const http = require('http')

//2.创建服务器
const app = http.createServer( (req,res)=>{
    if( req.url === '/getList' ){
        //设置允许跨域响应头
        res.setHeader('Access-Control-Allow-Origin', '*');
        //响应json字符串
        res.end('{"name":"张三"}')
    }
} )

//3.开启服务器
app.listen(3000,()=>{
    console.log('服务器启动成功')
})

res.setHeader('Access-Control-Allow-Origin', '*');

这行代码的工作过程:浏览器请求发送了, 服务器也响应了, 但是浏览器发现了跨域访问, 判断是否有`响应头: Access Control Allow Origin' (后端是否允许跨域访问, 如果允许, 浏览器就把数据留下, 否则抛弃掉然后报错)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大臣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值