// 导入express
const express = require('express')
// 创建应用对象
const app = express()
// 创建路由对象
// get
app.get('/',(req,res)=>{
// 原生获取请求报文参数
console.log(req.method)
console.log(req.url)
console.log(req.httpVersion)
console.log(req.headers)
//express操作
console.log(req.path);
console.log(req.query);
console.log(req.ip);//获取ip
console.log(req.get('host'));//获取请求头
res.send('home')
})
// post
app.post('/login',(req,res)=>{
res.send('login')
})
// 匹配所有方法
app.all('/all',(req,res)=>{
res.send('all')
})
// 获取路由参数
app.get('/:id',(req,res)=>{
console.log(req.params.id);//获取路由参数
res.send('product detail')
})
// 404,其他未匹配路由
app.all('*',(req,res)=>{
res.send('404 NOT FOUND')
})
// 监听端口
app.listen(3000,()=>{
console.log('已启动....');
})
// 导入express
const express = require('express')
// 创建应用对象
const app = express()
// 设置响应
app.get('/result', (req, res) => {
// http模块设置响应方式
// res.statusCode = 404
// res.statusMessage = 'NOT F'
// res.setHeader('abc','xyz')
// res.write('响应体')
// res.end('hi')
// express响应
// res.status(500)
// res.set('xxx','yyy')
// res.send('中文响应')
// 连贯操作
// res.status(404).set('xxx','yyy').send('你好朋友')
// res.redirect('https://www.baidu.com/')//重定向
// res.download('./package.json')
res.json({
age: 23,
name: 'xxx'
})//响应json
// res.sendFile(__dirname+'/home.html')//响应文件内容
})
// 监听端口
app.listen(3000, () => {
console.log('已启动....');
})
中间件函数记录访问ip及url
// 导入express
const express = require('express')
const fs = require('fs')
const path = require('path')
// 创建应用对象
const app = express()
// 声明中间件函数
function recordMiddleware(req, res, next) {
let { url, ip } = req
fs.appendFileSync(path.resolve(__dirname, './access.log'), `${url} ${ip}\r\n`)
next()
}
// 使用中间件函数
app.use(recordMiddleware)
app.get('/admin', (req, res) => {
// let { url, ip } = req
// fs.appendFileSync(path.resolve(__dirname, './access.log'), `${url} ${ip}\r\n`)
res.send('管理')
})
app.get('/home', (req, res) => {
res.send('首页')
})
// 监听端口
app.listen(3000, () => {
console.log('已启动....');
})
// 导入express
const express = require('express')
// 创建应用对象
const app = express()
// 声明中间件函数
function recordMiddleware(req, res, next) {
if(req.query.code == '521'){
next()
}else{
res.send('错误!')
}
}
app.get('/admin',recordMiddleware, (req, res) => {
res.send('管理')
})
app.get('/home', (req, res) => {
res.send('首页')
})
// 监听端口
app.listen(3000, () => {
console.log('已启动....');
})
通过访问 http://127.0.0.1:3000/form.html 可访问 02.路由的介绍 文件夹下的form.html
// 导入express
const express = require('express')
// 创建应用对象
const app = express()
// 静态资源中间件设置 __dirname+'/02.路由的介绍'为静态资源文件夹的目录
app.use(express.static(__dirname+'/02.路由的介绍'))
app.get('/admin', (req, res) => {
res.send('管理')
})
app.get('/home', (req, res) => {
res.send('首页')
})
// 监听端口
app.listen(3000, () => {
console.log('已启动....');
})
注意事项:
//app.use声明在前,所有先响应静态资源;如果admin路由写前面,则会响应‘管理’
app.use(express.static(__dirname+'/02.路由的介绍'))
app.get('/admin', (req, res) => {
res.send('管理')
})
详细使用可在 https://www.npmjs.com/package/body-parser中查看
// 导入express
const express = require('express')
const bodyParser = require('body-parser')
// 创建应用对象
const app = express()
const urlencodedParser = bodyParser.urlencoded({ extended: false })
// 获取html页面
app.get('/login',(req,res)=>{
res.sendFile(__dirname+'/form.html')
})
// 登录
app.post('/login',urlencodedParser,(req,res)=>{
console.log(req.body);//可获取请求体信息
res.send('获取用户数据')
})
// 监听端口
app.listen(3000,()=>{
console.log('已启动....');
})
只有当http://127.0.0.1:3000/form.html
时能访问到图片资源
// 创建应用对象
const app = express()
// 防盗链中间件
app.use((req,res,next)=>{
let referer = req.get('referer')
if(referer){
let url = new URL(referer)
let hostname = url.hostname
if(hostname !=='127.0.0.1'){
res.status(404).send('404
')
}
}
next()
})
// 静态资源中间件设置 __dirname+'/02.路由的介绍'为静态资源文件夹的目录
app.use(express.static(__dirname+'/02.路由的介绍'))
app.get('/admin', (req, res) => {
res.send('管理')
})
// 监听端口
app.listen(3000, () => {
console.log('已启动....');
})
form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<img src="http://127.0.0.1:3000/case1.png" alt="" srcset="">
<form action="http://127.0.0.1:3000/test" method="post">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit" value="提交" style="color:white;background-color: rgb(13, 83, 235);">
</form>
</body>
</html>
当路由较多时,写在一个文件内比较混乱,后期维护成本高,所以可以利用路由模块化 将路由写在多个文件中
路由主文件:
// 导入express
const express = require('express')
const info = require('./info')
// 创建应用对象
const app = express()
app.use(info)
//app.use('/info',info) 设置此文件下的路由的前缀
// 创建路由对象
// get
app.get('/',(req,res)=>{
res.end('home')
})
// 404,其他未匹配路由
app.all('*',(req,res)=>{
res.end('404 NOT FOUND')
})
// 监听端口
app.listen(3000,()=>{
console.log('已启动....');
})
其他文件:
info.js:
const express = require('express')
// 创建路由对象
const router = express.Router()
router.get('/hi',(req,res)=>{
res.send('hi页面
')
})
module.exports = router