Express也是创建web服务器的。
Express也可以创建API接口服务器

express的基本使用

const express=require('express');
const app=express()
app.listen(8088,()=>{
    console.log('服务器启动起来了。');
})

GET和POST请求 send()响应给客户端

send()在客户端(浏览器)显示

const express=require('express');
const app=express();//创建web服务器
// 监听客户端的get,post和响应内容
app.get('/user',function(request,response){
    response.send({
        name:'张三',
        age:20,
        gender:'男'
    });
    app.post('/user',(request,response)=>{
        response.send("请求成功");
    })
})
// 监听端口
app.listen(8081,()=>{
    console.log("服务器启动了。")
})

request.query

app.get('/',function(request,response){
    // request.query可以获取到客户端发送来的数据内容
    // request.query默认情况下是空对象,只有url地址携带参数时request.query才会有数据。
    console.log(request.query);
    response.send(request.query);
})

image

动态参数

动态参数url中用下划线作为分隔符。
就是在地址中给你配置好 参数名称你在请求的时候自己加上参数值就可以。

// 动态参数匹配,就是他给你制定好名称,你自己传入参数的value
app.get('/user/:id',(requset,response)=>{
    response.send(requset.params);//获取所有的动态id
        response.send(requset.params.id);//获取动态参数id的值
})

image

多个动态参数
app.get('/user/:id/:name',(requset,response)=>{})
image

动态路径参数也可以用 - 横杠 . 点来分割

const express=require("express");
const app=express();
app.get('/api/:id-:name',function(request,response){
    response.send(request.params);
})
app.post('/api/:password.:status',function(request,response){
    response.send(request.params);
})
app.listen(8087,()=>{
    console.log("localhost:8087 status is OK");
})

'/api/:id-:name'
image

'/api/:password.:status'
image

静态资源托管

app.use(express.static('../clock'))

访问的时候不用加上clock文件夹直接访问http://localhost:8081/index.html 主路径加文件名就行。

  1. 通过 express.static() 方法可创建静态资源服务器,向外开放访问静态资源。
  2. Express 在指定的静态目录中查找文件,并对外提供资源的访问路径,存放静态文件的目录名不会出现在 URL 中
  3. 访问静态资源时,会根据托管顺序查找文件
  4. 可为静态资源访问路径添加前缀

静态托管——挂载路径前缀

前缀可以起跟实体文件一样的名称也可以自己随便起一个名字。
起名字了之后请求就需要添加上这个前缀来请求静态托管的文件。
代码:app.use('/public',express.static('../clock'))
之后请求的url地址:
http://localhost:8081/public/index.html

nodemon自动重启插件

Npm的nodemon地址

启动命令:nodemon app.js

express路由

router.js

const router=express.Router();
// 挂载路由
router.get('/user/list',function(request,response){
    response.send("Get user list");
    });
router.post("/user/add",function(request,response){
    response.send("添加成功");
})
// 向外暴露文件
module.exports=router
main.js

const express=require('express');
// 引入路由
const router =require("./router")
const app=express()
//app.use(router);//把引入的router放入use就会生效。
app.use('/api',router);// 为路由添加前缀
app.listen(8088,()=>{
    console.log('服务器启动起来了。');
})

use()与all()的区别

app.use(‘/a’)可以匹配路由‘/a’,'/a/b',但是 app.all('/a')只能识别'/a'
use通常是用作挂载中间件的,调用顺序是书写顺序。
all是路由中指代所有的请求方式,如all('/a'),能同时覆盖:get('/a') 、 post('/a')、 put('/a') 等