一、http模块
请求的对象 req
req.url 获取请求的资源,格式为'/login' //在浏览器网址处输入
req.method 获取请求的方法 /login GET //显示在cmd里
练习:使用http模块创建WEB服务器,设置端口,监听请求,根据请求作出响应 '/index' 响应 '这是首页' (响应一个文件‘1.html’) '/study' 跳转 https://www.tmooc.cn 其它 响应 404 Not Found |
const http=require('http') const fs=require('fs') const app=http.createServer() app.listen(3000) app.on('request',(req,res)=>{ //判断请求的资源,作出响应 if(req.url==='/index'){ res.setHeader('Content-type','text/html;charset=utf-8') //res.write('这是首页') //响应1.html文件,先同步读取内容,把读取的内容作为要响应的内容 //默认读取到的是Buffer var s=fs.readFileSync('./1.html') //直接把读取到的响应,会自动转为字符串 res.write(s) }else if(req.url==='/study'){ res.statusCode=302 res.setHeader('Location','https://www.tmooc.cn') }else{ res.statusCode=404 res.write('404 Not Found') }res.end() }) |
框架:是项目开发的一整套解决方案,简化了已有的功能,添加了新的功能;为了项目开发准备的
前端:Vue React Angular 小程序框架
Java:spring
Python:Django
PHP:thinkPHP,yii
asp:.net
Node.js:express koa egg...
二、express
基于Node.js平台,快速、开放、极简的WEB开发框架
属于是第三方的模块,需要先去下载安装
npm install express
网址:Express - 基于 Node.js 平台的 web 应用开发框架 - Express 中文文档 | Express 中文网
1.创建WEB服务器
express() 创建WEB服务器
listen() 设置端口
引入express模块 会自动到node_modules目录中寻找express目录,接着再往express目录中寻找index.js | const express=require('express') //console.log(express) |
创建WEB服务器 | const app=express() |
设置端口(端口设置时,加不加回调函数都是异步执行) | app.listen(3000,()=>{ console.log('服务器启动成功') }) |
2.路由
监听特定的一种请求;结构清晰,便于维护
路由包含三部分:请求的方法、请求的URL、回调函数
res 响应对象
res.send() 设置响应内容并发送
res.redirect() 设置响应的重定向
res.sendFile() 设置响应的文件,注意事项:必须使用绝对路径__dirname
添加路由,监听首页的请求 请求方法:get 请求的URL:/index | app.get('/index',(req,res)=>{ //这两个和之前http模块不一样,比之前功能更多 //req 请求对象 //res 响应对象 //设置响应的内容并发送 res.send('这是首页') }) |
练习:添加路由,监听商品列表请求 请求方法:get 请求的URL:/list | //响应‘这是商品列表’ app.get('/list',(req,res)=>{ res.send('这是商品列表') }) |
添加路由,跳转至其他网页 请求方法:get 请求的URL:/study | app.get('/study',(req,res)=>{ //设置响应的重定向 res.redirect('https://www.tmooc.cn') }) |
练习:添加路由(请求方法:get 请求的URL:/) 跳转到路由/index | app.get('/',(req,res)=>{ //requedt请求 response响应 res.redirect('/index') }) |
添加路由(get/detail),响应本地文件1.html 添加本地文件必须使用绝对路径,可以用__dirname获取 | app.get('/detail',(req,res)=>{ //获取绝对路径 |
req 请求对象
req.url 获取请求的URL
req.method 获取请求的方法
req.query 获取get传递的参数
传递方式 | 格式 | 路由获取 |
get传递 | http://127.0.0.1:3000/mysearch?kw=dell | req.query {kw: 'dell'} |
params传递 | http://127.0.0.1:3000/mysearch/dell | req.params 需要设置参数名 {kw: 'dell'} |
post传递 (见笔记day05) | 网址中不可见 http://127.0.0.1:3000/mysearch | 需要使用中间插件转为对象 req.body {kw: 'dell'} |
练习:编写文件04_express.js,使用express创建WEB服务器,设置端口;添加路由(get /search),响应文件search.html. | const express=require('express') const app=express() app.listen(3000,()=>{ console.log('成功') }) app.get('/search',(req,res)=>{ res.sendFile(__dirname+'/search.html') }) | <!--search.html代码--> <h1>用户搜索<h1> |
添加路由,监听按钮提交的请求(get,/mysearch) //响应‘搜索成功’ | app.get('/mysearch',(req,res)=>{ //req 请求的对象 //请求的方法,请求的URL //console.log(req.method,req.url) //获取get传递的参数 //传参console.log(req.query) console.log(req.query.kw) res.send('搜索成功') }) |
练习:添加路由(get /login),响应登录的网页login.html,点击提交向服务器发请求(get /mylogin),添加路由,监听按钮提交的请求,获取传递的参数,响应‘登录成功,欢迎:xxx’ | |
app.get('/login',(req,res)=>{ res.sendFile(__dirname+'/login.html') }) app.get('/mylogin',(req,res)=>{ res.send('登录成功,欢迎:'+req.query.user) }) | <!--login.html代码--> <h1>用户登录<h1> |
练习:编写文件05_params.js,使用express创建WEB服务器,设置端口,添加路由(get /mysearch),响应‘搜索成功 搜索的商品:xxx’ |
const express=require('express') const app=express() app.listen(3000,()=>{ console.log('成功') }) //:kw 以冒号开头的名字,表示参数名,会接收参数值 app.get('/mysearch/:kw',(req,res)=>{ //获取params传递的参数 console.log(req.params) res.send('搜索成功 搜索的商品:'+req.params.kw) }) |