node.jsday04
目录
前言
node.jsday04学习开始
一、复习
二、http模块
- 请求的对象
req.url--获取请求的资源,格式 '/xxx'
req.method--获取请求的方法
- 练习:编写文件2_http.js,使用http模块创建WEB服务器,设置端口,添加事件监听客户端的请求,根据请求的资源来做出响应
/index-- 响应 '<h1>这是首页</h1>'
/1.html--响应 1.html文件(先同步读取文件内容,然后把读取的内容作为响应内容 )
/study--跳转到 https://www.tmooc.cn
其它-- 响应 404 Not Found
<!--1.html--> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>商品列表</title> </head> <body> <h1>这是一组商品列表</h1> </body> </html>
// 引入http模块 const http = require('http') // 引入fs模块 const fs = require('fs') // 创建WEB服务器 const app = http.createServer() // 设置端口 app.listen(3000,()=>{ console.log('服务器启动成功') }) // 添加事件,监听客户端请求 app.on('request',(req,res)=>{ // 判断请求的资源 req.url if(req.url === '/index'){ res.setHeader('Content-Type','text/html;charset=utf-8') res.write('<h1>这是首页</h1>') }else if(req.url === '/1.html'){ // 同步读取文件 var data = fs.readFileSync('1.html') // 把读取的内容作为要响应的内容,会自动将buffer转为字符串 res.write(data) }else if(req.url === '/study') { // 设置响应的状态码 res.statusCode = 302 // 设置响应头信息中跳转的网址 res.setHeader('Location','https://www.tmooc.cn') }else{ // 设置响应状态码为404 res.statusCode = 404 // 设置响应内容为 Not Found res.write('Not Found') } // 无论响应任何内容,最后都要结束 res.end() })
框架:是一整套解决方案,简化了已有的功能,增加了新的功能,框架为项目开发准备的。
三、express框架
- 地址:Express - 基于 Node.js 平台的 web 应用开发框架 - Express 中文文档 | Express 中文网
- 基于Node.js平台,快速、开放、极简的WEB开发框架
- 属于第三方模块,需要先下载安装
- npm install express
3.1创建WEB服务器
//1.引入express模块 //2.创建WEB服务器 const app=express() //3.设置端口 app.listen(3000)
3.2路由
- 监听特定的请求,路由的组成部分:请求的URL、请求的方法、回调函数
- res--响应的对象
- res.send()--设置响应内容并发送
- res.redirect()--设置响应的重定向,跳转到另一个URL
- res.sendFile()--响应一个文件,路径必须使用绝对路径, __dirname
// 引入express模块 const express = require('express') // console.log( express ) // 创建WEB服务器 const app = express() // 设置端口 app.listen(3000,()=>{ console.log('服务器启动成功') }) // 添加路由,监听对首页的请求 // 请求的URL:/index 请求的方法:get app.get('/index',(req,res)=>{ // req 请求的对象 // res 响应的对象 // 设置响应的内容并发送 res.send('<h1>这是首页</h1>') }) // 练习:添加路由,监听对用户登录的请求 // 请求的URL:/login 请求的方法:get // 响应 '<h1>登录成功</h1>' app.get('/login',(req,res)=>{ res.send('<h1>登录成功,欢迎</h1>') }) // 添加路由 请求的URL:/study 请求的方法:get // 跳转到 tmooc app.get('/study',(req,res)=>{ res.redirect('https://www.tmooc.cn') }) // 添加路由 请求的URL:/ 请求的方法:get // 跳转到 app.get('/',(req,res)=>{ res.redirect('/index') }) // 添加路由 请求的URL: /1.html 请求的方法:get // 响应文件1.html app.get('/1.html',(req,res)=>{ // 文件必须是绝对路径 res.sendFile(__dirname + '/1.html') }) // 获取当前模块的绝对路径 console.log( __dirname )
3.3使用插件将post传参转为对象
(1)使用插件 app.use( express.urlencoded({ extended: true //内部是如何转为对象,是否使用第三方模块 }) )
(2)路由中获取参数 req.body
post传递的参数出现在请求体中
练习:编写文件04_express.js,引入express模块,创建WEB服务器,设置端口;添加路由(get /search),响应搜索的网页search.html
练习:添加路由(get /login),响应登录网页login.html,点击提交向服务器发请求(get /mylogin),响应‘登录成功!欢迎:xxx’
练习:添加路由(get /reg),响应注册的网页reg.html,点击提交向服务器发请求(post /myreg),响应‘注册成功!’
<!-- search.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>用户搜索</title> </head> <body> <!-- form 用于提交按钮向后端发请求 method 设置请求的方法 action 设置请求的URL name 设置参数名,接收用户输入的值 --> <form method="get" action="/mysearch"> <input type="text" name="wd"> <button>搜索</button> </form> </body> </html>
<!-- login.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>用户登录</title> </head> <body> <h1>用户登录</h1> <form action="/mylogin" method="get"> 用户<input type="text" name="user"><br> 密码<input type="text" name="pwd"><br> <button>登录</button> </form> </body> </html>
<!-- reg.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>用户注册</title> </head> <body> <h1>用户注册</h1> <form action="/myreg" method="post"> 用户<input type="text" name="user"><br> 密码<input type="text" name="pwd"><br> 邮箱<input type="text" name="email"><br> 手机<input type="text" name="phone"><br> <button>注册</button> </form> </body> </html>
// 04_express.js // 引入express模块 const express = require('express') // 创建WEB服务器 const app = express() // 设置端口 app.listen(3000) // 添加路由(get /search) // 响应文件search.html app.get('/search',(req,res)=>{ res.sendFile(__dirname + '/search.html') }) // 添加路由(get /mysearch),监听按钮提交的请求 ,响应'搜索成功!搜索的关键字:' app.get('/mysearch',(req,res)=>{ // 获取请求的URL ,请求的方法 // console.log( req.url, req.method ) // 获取get传递的参数 console.log( req.query ) res.send('搜索成功!搜索的关键字:'+req.query.wd) }) // 添加路由(get /login),响应登录的网页login.html app.get('/login',(req,res)=>{ res.sendFile(__dirname + '/login.html') }) // 添加路由(get /mylogin),监听按钮提交的请求 app.get('/mylogin',(req,res)=>{ // 获取get传递的参数 var obj = req.query console.log(obj) res.send('登录成功!欢迎:'+obj.user) }) // 添加路由(get /reg),响应注册文件reg.html app.get('/reg',(req,res)=>{ res.sendFile(__dirname + '/reg.html') }) // (1)添加插件,将post传参转为对象 app.use( express.urlencoded({ // 内部是否会使用一个第三方模块转为对象 // true->使用 false->不使用 extended:true }) ) // 添加路由(post /myreg),监听按钮提交的请求 app.post('/myreg',(req,res)=>{ // (2)获取post传递的参数 var obj = req.body console.log(obj) res.send('注册成功') })
传参方式
格式
路由中获取
get传递
http://127.0.0.1:3000/mysearch?wd=北京
req.query
{wd: '北京'}
post传递
http://127.0.0.1:3000/mysearch
①使用插件转为对象
②req.body
{wd: '北京'}
params传递
http://127.0.0.1:3000/mysearch/北京
①在路由中设置参数名
②req.params
{wd: '北京'}
总结
node.jsday04学习结束