NodeJS开发的时候是有一些弊端
请求服务的时候不方便,比如URL的匹配不方便,对于静态页面和文件请求不方便等等
Express简化了关于NodeJS应用的开发
官网地址:https://www.expressjs.com.cn/
安装 cnpm install –save express
var express = require("express")
var app = express();
app.get("/",function (req,res) {
res.send("你好 express
")
})
app.listen(3000)
var express = require("express");
var app = express();
罗列中间件请求内容
罗列中间件请求内容
罗列中间件请求内容
app.listen(3000)
我们引入express之后,这个express就是一个函数,调用这个函数就可以创建一个对象,这个对象里面封装了所有的express的方法,需要注意的是,一个程序只能有一个对象
中间件就是所谓的HTTP的请求
中间件所干的事情就是用户访问页面的时候当前这次请求的处理事件
我们现在可以使用请求方式来处理不同的事情,在同一个路由地址的情况下
var express = require("express");
var app = express();
app.get("/",function(req,res){
console.log("我是GET请求")
})
app.post("/",function(req,res){
console.log("你好我是POST请求")
})
app.listen(3000)
原生NodeJS路由的匹配是很精确的,比如/star此时路由地址是/star?name=小明,此时由于没有精确匹配不会显示页面
但是express帮我们封装了对应参数集合,匹配的只是路由的主干体
var http = require("http");
var server = http.createServer(function (req,res) {
res.setHeader("Content-type","text/html;charset=UTF8")
if(req.url == '/star'){
res.end("原生node匹配
")
}else{
res.end("无页面
")
}
})
server.listen(3000)
var express = require("express");
var app = express()
app.get("/star",function (req,res) {
res.send("express 匹配的路径
")
})
app.listen(3000)
express使用:来匹配路由地址,我们可以通过req.params.**来获取这个参数
var express = require("express")
var app = express()
app.get("/:name/:id",function (req,res) {
let name = req.params.name;
let id = req.params.id;
res.send("你好我是"+name+",我的学号是"+id+"
")
})
app.listen(3000)
此时我们就省略了自己的正则匹配了
还有一个通配符是*
app.get("*",function(req,res){
res.send("无页面")
})
*匹配的是任何,表示的是匹配任何的页面地址,一般用来做路由的重定向,或者是抛出无页面的显示
所有的中间件是必须要有顺序的,此时如果我们的中间件内容会匹配多个,此时如果不“放行”,会进行拦截。
app.get("/xiaogang/10002",function(req,res){
res.send("我是小刚,我的学号是10002,我的身份是班长
")
})
app.get("/:name/:id",function(req,res){
let name = req.params.name;
let id = req.params.id;
res.send("我是"+name+",我的学号是"+id+",我的身份是学生
")
})
此时如果页面的路由地址是/xiaogang/10002会返回第一个中间件的内容,第二个中间件虽然也符合匹配条件,但是不会再输出内容, 因为拦截了
当一个中间件内容匹配了之后我们此时想让其他的中间件继续进行匹配,此时可以使用next()进行放行
我们可以模拟匹配多个路由,此时我们在第一个中间件中进行一个计数器的设置,然后第二个中间件中显示这个结果
var express = require("express")
var app = express()
var num = 0;
app.get("/xiaoming/1001",function (req,res,next) {
num ++ ;
next()
})
app.get("/:name/:id",function (req,res) {
let name = req.params.name;
let id = req.params.id;
res.send("你好我是"+name+",我的学号是"+id+"计数器"+num+"
")
})
app.listen(3000)
num的数值也会递增
所有的输出方法,都不需要自己写setHeader(),express会帮你自动带上Content-type
var express = require("express");
var app = express()
app.get("/",function (req,res) {
res.send("你好")
})
app.listen(3000)
app.get("/" ,function (req,res) {
res.json({
"name":"张三",
"age": "25岁",
"sex": "男",
"tel":13526597452
})
})
如果输出的内容是JSONP,此时使用res.jsonp()来输出,此时express会自动检测callback的请求参数自动封装对应的函数执行结果
模拟本地服务器 发送请求 phpnow 》 htdocs中
app,js
var express = require("express")
var app = express()
app.get("/" ,function (req,res) {
res.jsonp({
"name":"张三",
"age": "25岁",
"sex": "男",
"tel":13526597452,
"family":["父亲","母亲","兄弟","孩子"]
})
})
app.listen(3000)
果请求的是一个外置的页面,此时要用sendFile(),需要注意是一定要使用绝对路径
var express = require("express")
var app = express()
app.get("/",function (req,res) {
res.sendFile(__dirname + "/public/name.html")
})
app.listen(3000)
var express = require("express")
var app = express()
app.get("/",function (req,res) {
res.redirect('https://www.baidu.com/')
})
app.listen(3000)
原生NodeJS所有的文件请求,都必须设定一次url的匹配,很不方便
express提供一个“静态化”的功能,指的是改静态化了文件夹,此时自动拥有路由
app.use(express.static("需要静态化的文件夹名称"))
var express = require("express");
var app = express()
app.use(express.static("public"))
app.listen(3000)
http://127.0.0.1:3000/images/0.jpg
上图的路径从 public里面开始的,因为public文件夹已经被静态化了
此时的静态化路由地址也是可以自定义的
var express = require("express");
var app = express();
app.use("/wenjianjia",express.static("public"));
app.listen(3000)