================= Node 原生写法 ======================
* 在node中实现路由的使用,需要依赖于node的核心模块http模块和fs模块,以下通过一个渲染页面的案例进行呈现.
思路:
Step1: 首先引入http和fs模块
Step2: 使用http创建服务,并监听端口号
Step3: 使用req.url获取请求路由读取index.html页面文件,以此达到渲染页面的效果
// 引入模块
const http = require("http");
const fs = require("fs");
// 创建服务
http.createServer((req,res)=>{
// 判断请求路由
if(req.url=="/"){ // 如果是初始路由
// 使用fs读取index.html文件
fs.readFile('./index.html',(err,data)=>{
if(err) throw err;
// 写请求头
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
res.end(data) // 返数据,返回的是整个html页面
// console.log(req.method); // 通过req.method 可以知道请求方式是 GET
})
}else if(req.url=="/test"){ // 此时这个"/test"是index.html页面发来的请求,可以使用原生的请求方式
//此处做具体操作
}
}).listen(2001,()=>{ // 2001 端口号(一服务只有唯一一个端口号) 监听状态 成功返回以下内容
console.log('node服务创建完毕!')
})
* 总结:在node原生代码中路由是使用req.url判断的,通过对req.url的判断就可以针对不同路由做不同的事情.
Tip:res.end() 只能触发一次 ; res.write() 可触发多次
================== Express框架写法 ====================
* 在express框架中实现路由,依赖于express构造出来的对象的use方法,示例代码如下:
思路1:
Step1: 创建express服务,构造一个server对象,并监听端口号
Step2: 使用server.use方法判断路由
Step3: 在回调函数中实现逻辑
// 引入模块
const Express=require("express");
// 创建模块
const server=new Express();
// 判断路由,并处理逻辑 (参数一:"请求路由"',参数二:"处理函数")
server.use('/sucai',(req,res,next)=>{
res.write('素菜:萝卜')
console.log('吃萝卜')
next()
})
server.use('/huncai',(req,res,next)=>{
res.write('荤菜:猪肉')
console.log('吃白菜')
next()
})
// next() 方法调用时则在''素菜''路由执行完便执行"荤菜路由"
})
思路2:
Step1:引入express模块,创建一个express对象
Step2:创建一个router对象,使用router.get或router.post等方法处理路由
Step3:挂载router到express服务上
// 1.引入
const express=require('express');
// 2.构建服务器
const server=new express();
// 3.监听端口
server.listen(2001,()=>{
console.log('express is ok')
})
// 获取路由中间件
let router=express.Router();
router.get('/login',(req,res)=>{
res.send('登录界面')
}).get('/register',(req,res)=>{
res.send('注册页面')
})
//挂载到应用中间件上,也就是服务器
server.use(router);
小拓展:
res.download(’./xxx.txt’) // 下载文件
res.json({}) // 响应json对象
res.jsonp(数据) // 配合jsonp 要求客户端请求的时候也是jsonp的方式, 并且callback=xxx
res.redirect() // 重定向 301是永久重定向, 302临时重定向
res.send() // 发送字符串数据自动加content-type
res.sendFile() // 显示一个文件
res.sendStatus() // 响应状态码
*总结:express框架中使用server.use(路由,函数)或者把路由单独拉出来写在router中,最后挂到服务上的方式.
===================== Koa框架 ========================
* Koa框架中使用路由和express框架中的第二个思路相似,但是挂载方式和处理函数不一样,注意区分.
思路:
Step1:引入koa模块和koa-router模块
Step2:再构建一个router对象调用get或post等方法处理路由
Step3:将router挂载到服务上去
// 路由
const Koa = require(‘koa’)
// 与express 区别 在exrpess中是内置的中间件;使用方式 express.Router
// 在koa2中;路由中间间;属于第三方中间件
// 导入模块(中间件)
const Router = require('koa-router')
const server= new Koa()
// 使用第三方中间件
const router = new Router()
router.get('/',async(ctx)=>{// 首先这里处理函数变成了异步,用ctx代替了req和res
// 响应给页面
ctx.body = '你好我是路由响应的' // 用ctx.body代替了res传到客户端的内容
})
// 将路由与实例挂钩 (将路由中间挂在到应用中间件上)
// routes() 作用;这个中间会解析http 请求的内容
// allowedMthodes() 作用:
// 优化状态码的处理405 和501 不再是全部的404
// 405代表请求url有,但是没有写该请求方式的响应
// 501服务器不支持该请求方式
server.use(router.routes(),router.allowedMethods())
server.listen(3000,()=>{
console.log('koa is ok')
})