node是什么?:
node是基于Chrome v8引擎 开发的一个版本工具
node可以做什么?
1.可以使用js开发后端代码;
2.它可以让vue基于node运行;
node的优势?
是非阻塞式的一个代码开发;
什么是package.json?
package.json一般存在于项目的根目录当中,
里面可以配置:
项目名称(name),版本号(version),项目描述(description),
启动项目的核心文件(main),配置好的npm语句指令(scripts),
项目的作者(author),项目配置的依赖包(dependencies);
如何初始化package.json文件:
可以使用电脑自带的命令行工具:
win+R 在运行里面输入 cmd 再切换到自己的项目文件的根目录下;
使用npm init 或者 npm init -y (直接生成package.json文件);
如何安装依赖包:
切换到项目的根目录:
npm install 依赖包名称 (注意,默认安装的是当前依赖包的最新版本);
如果要安装指定版本可以使用:
npm install 依赖包名称@版本号 (例如npm install mysql@2.18.1);
node的require()引入规则;
1. require('模块名'):
首先去package.json文件的dependencies里面去找有没有配置这个依赖包;
如果没有配置,会报错;如果配置了,但是实际node_modules并没有安装
这个模块,也会报错(cannot ...);
2.require('路径名'):
这个方式遵循,路径(绝对路径/相对路径)的引入规则;
如何使用node的内置模块http创建web服务器:
1.引入http模块;
const http = require('http');
2.使用http模块的创建服务方法;
const server = http.createServer();
3.监听外部的请求
server.on('request', (req,res) => {
每一个请求,都会先经过这个回调函数;
3.1 响应utf-8格式;
res.setHeader('content-type','text/html;charset=utf-8');
3.2 返回参数
res.end(123)
res.end("123")
返回对象注意; 要返回JSON字符串
res.end(JSON.stringify({name: '666'}))
})
4.启动web服务
server.listen(端口号,启动的地址,启动后的回调函数)
启动的地址:
必须是本地的地址;也就是在系统中的网络,找到状态,有一个IPV4 地址;
这个Ipv4地址,是在本地局域网中路由器分配的IP地址:
如果不填,默认使用localhost和127.0.0.1地址启动;
因为在网络开发中localhost和127.0.0.1都默认的是本地IP启动;
server.listen(8080,127.0.0.1,()=>{
console.log('服务启动成功,地址是http://127.0.0.1:8080/或者是http://localhost:8080/');
})
如何使用外部模块mysql启动:
1. 在项目的根目录的命令行 npm install mysql;
2. 引入mysql模块
const mysql = require('mysql');
3. 创建mysql连接
const con = mysql.createConnection({
host: '数据库地址',
database: '数据库名称',
user: '数据库用户名',
password: '数据库密码',
port: '数据库的端口号默认是3306(选填)'
})
4.启动mysql连接
con.connect((err) => {
如果err有值 则证明数据库连接失败
if(err){
console.log('数据库连接失败');
}else{
console.log('数据库连接成功');
}
})
*/
什么是跨域?
只有浏览器存在跨域?浏览器的跨域形成的原因,
是因为浏览器的信息,是暴漏在客户端(浏览器)上,
这样的情况非常不安全,有了同源策略,
IP,端口,浏览器;
JSOP解决跨域的原理:
前端通过动态创建script标签,通过src属性,进行引入
相应的接口,但是这个时候虽然解决了跨域,并不能拿到真实的数据,
还需要通过传递参数,后端配置返回参数;
前端通过window['参数']();的方式获得数据,
但是注意:
任何跨域,只要后端不同意,都没办法完成
后端解决跨域:
后端通过设置请求IP的白名单,来设置哪个IP可以访问服务器;
在IP白名单之内的都可以访问服务器;
什么是get请求:
get请求的参数都会拼接在地址栏后方
如: 地址:端口/路径?参数
get会把参数等敏感信息,暴漏在地址栏,
所以不是很安全;并且地址栏的长度是由限制的;
大概能够存储255左右字;
nodejs如何通过http的内置模块获取到前端发送的参数:
get请求:
前端通过ajax将参数拼接在路径上;
后端通过requert的req.url拿到,
路径后的参数信息,做出数据处理;
根据不同的路径,处理不同的函数;
http和mysql如何连接在一起:
因为每次get请求,都会访问服务端;
然后前端有注册需求;
那么就可以使用路径?参数的形式,发给服务端
服务端接收到参数,再去处理参数
处理的过程:
1. 拿到数据
2. 连接数据库
3. 查询数据
4. 插入数据
通过不同的接口访问不同的后端方法:
什么是接口?
接口就是,前端和后端交流的一种标准;
比如前端要注册一个账号;那么前端通过什么将前端的用户信息
发送给后端?通过接口!
接口就是ajax的请求路径,路径不同,接口不同;
后端根据前端请求的路径,处理不同的方法;
比如:
地址/register?参数 这个是注册接口
地址/login?参数 这个是登录接口
地址/getlist?参数 这个是获取列表接口
什么express:
Express是一个基于http内置模块升级的版的一个模块;
他省去了http需要处理参数的一些操作,
让API开发起来更为方便;
experss的用法:
需要在项目的根目录安装模块
npm install express;
入口的写法:
app.get/post();
get请求的参数在req.query里面,可以找到;
参数的形式是一个对象类别的数据;
什么是express中间件:
use 可以理解为,在进入入口之前,
对前端发送的任何的参数,进行一个
数据的处理,目的是让入口函数里面,
能够通过参数,更简便的获取到前端发送的参数
cors跨域:
在http模块中,需要通过设置IP白名单的方式,
相应200成功请求的方式解决跨域问题,
在express中间件可以直接引入cors模块解决跨域
nodemon:
解决的问题:
它可以监听文件的变化,并且在文件变化的之后
重启server服务,保证server服务的一直处于运行状态;
不需要更改一次就手动重启一次
Module.exports:
变量暴漏:
因为在外部的js中定义的任何方法,
使用require引入时候,如果没有暴漏出来,
require是找不到里面定义的任何东西的;
因为在NodeJs里面不存在BOM,所以不存在window;
因此需要使用Module.exports需要将可用的变量/方法暴漏在外,
让require可以找到;