目录
node环境说明
在node.js环境中是没有window的,所以window对象自然是未定义的
在node.js环境中全局对象为global,在global对象中会存在一些和window对象中名字相同且作用相同的地方
global.console.log
global.setInterval
global.clearInterval
global.setTimeout
global.clearTimeout
global.setImmediate
在node.js环境中声明的变量不会被添加到全局对象中,变量声明后只能在当前文件中使用
创建最基本的web服务器
1.导入http模块
const http = require('http');
2.创建web服务器实例
const server = http.createServer();
3.为服务器实例绑定request事件
//使用服务器实例的.on()方法,为服务器绑定一个request事件
server.on('request',(req,res)=>{
//只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用这个事件处理函数
console.log('Someone visit our web server.');
//调用res.end()方法,向客户端响应一些内容
res.end(str);
})
4.启动服务器
server.listen(80,()=>{
console.log('http server runnning at xxx');
})
根据不同的url响应不同的html内容
const http = require('http');
const server = http.createServer();
server.on('require',(req,res)=>{
//1.获取请求的url地址
const url = req.url;
//2.设置默认的响应内容
let content = '404 is not found'
//3.判断用户的请求是否为/或/index.html首页
if(url === '/' || url === '/index.html'){
content = '<h1>首页</h1>'
}else if(url === '/about.html'){
content = '<h1>关于页面</h1>'
}
//5.设置Content-Type响应头,防止中文乱码
res.setHeader('Content-Type','text/html; charset=utf-8')
//6.把内容响应给客户端
res.end(content)
})
server.listen(80,()=>{
console.log('server running at xxx');
})
express学习
express是基于Node.js平台的一个web开发框架
安装
npm i express@4.17.1
创建基本的web服务器
//1.导入express
const express = require('express')
//2.创建web服务器
const app = express()
//3.启动web服务器
app.listen(80,()=>{
console.log('express server running at xxx')
})
监听GET请求
app.get('请求url',function(req,res){处理函数})
监听POST请求
app.post('请求url',function(req,res){处理函数})
把内容响应给客户端
app.get('/user',(req,res)=>{
//调用express提供的res.send()方法,向客户端响应一个JSON对象
res.send({'name':'df','age':12})
//或
res.send('请求成功')
})
托管静态资源
其实就是把源代码呈现在网页上,供大家可以查看网页源代码
app.use('/abc',express.static('./files'))
安装nodemon
方便每次更新代码之后可以自动更新服务器
npm i -g nodemon
启动项目
nodemon index.js
express中的路由
基本使用
const express = require('express')
//创建web服务器app
const app = express()
//挂载路由
app.get('/',(req,res)=>{
res.send('xxx')
})
app.post('/',(req,res)=>{
res.send('xxx')
})
//启动web服务器
app.listen(80,()=>{
console.log('affafnakfhu')
})
路由模块化
创建文件router.js
//1.导入express
require('express')
//2.创建路由对象
const router = express.Router()
//3.挂载具体的路由
router.get('/user/list',(req,res)=>{
res.send('xxx')
})
router.post('/user/add',(req,res)=>{
res.send('xxx')
})
//4.导出路由模块
module.exports = router
注册路由模块
在index.js内注册路由模块
const router = require('./router.js')
app.use(router)
注意:app.use()函数的作用,就是用来注册全局中间件
中间件
有输入输出
express中间件的调用流程
当一个请求到达express的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理
express中间件的格式
//常量mw所指向的,就是一个中间件函数
const mw = function(req,res,next){
console.log('中间件函数')
//注意:在当前中间件的业务处理完毕之后,必须调用next()函数
//表示把流转关系转交给下一个中间件或路由
next()
}
//把mw注册为全局生效的中间件
app.use(mw)
简化版写法
app.use((req,res,next)=>{
console.log('中间件函数')
next()
})
多个中间件之间,共享同一份req和res。
比如获取到请求到达服务器的时间,可以放在中间件里共享,或者供下游的中间件或路由使用
错误级别的中间件
定义错误级别的中间件,捕获整个项目大的异常错误,从而防止程序的崩溃
只有错误级别的中间件是放在所有路由之后的
app.use((err,req,res,next)=>{
console.log('发生了错误'+err.message)
res.send('Error'+err.message)
})
适应cors中间件解决跨域问题
cors是express的一个第三方中间件。通过安装和配置cors中间件,可以很方便地解决跨域问题。
使用步骤分为如下3步:
1.安装中间件
npm install cors
2.导入中间件
const cors = require('cors')
3.配置中间件
app.use(cors())
CORS跨域资源共享
如果指定了Access-Control-Allow-Origin字段的值为通配符*,表示允许来自任何域的请求:
res.setHeader('Access-Control-Allow-Origin','*')
允许所有的HTTP请求方法
res.setHeader('Access-Control-Allow-Methods','*')
实现JSONP接口
必须在配置cors中间件之前,配置JSONP的接口
app.get('/api/jsonp',(req,res)=>{
//1.得到函数的名字
const funcName = req.query.callback
//2.定义要发送到客户端的数据对象
const data = {name:'zs',age:18}
//3.拼接出一个函数的调用
const scriptStr = `${funcName}(${JSON.stringify(data)})`
//4.把拼接的字符串,响应给客户端
res.send(scriptStr)
})