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);
})
动态参数
动态参数url中用下划线作为分隔符。
就是在地址中给你配置好 参数名称你在请求的时候自己加上参数值就可以。
// 动态参数匹配,就是他给你制定好名称,你自己传入参数的value
app.get('/user/:id',(requset,response)=>{
response.send(requset.params);//获取所有的动态id
response.send(requset.params.id);//获取动态参数id的值
})
多个动态参数
app.get('/user/:id/:name',(requset,response)=>{})
动态路径参数也可以用 - 横杠 . 点来分割
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'
'/api/:password.:status'
静态资源托管
app.use(express.static('../clock'))
访问的时候不用加上clock文件夹直接访问http://localhost:8081/index.html 主路径加文件名就行。
- 通过 express.static() 方法可创建静态资源服务器,向外开放访问静态资源。
- Express 在指定的静态目录中查找文件,并对外提供资源的访问路径,存放静态文件的目录名不会出现在 URL 中
- 访问静态资源时,会根据托管顺序查找文件
- 可为静态资源访问路径添加前缀
静态托管——挂载路径前缀
前缀可以起跟实体文件一样的名称也可以自己随便起一个名字。
起名字了之后请求就需要添加上这个前缀来请求静态托管的文件。
代码:app.use('/public',express.static('../clock'))
之后请求的url地址:
http://localhost:8081/public/index.html
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') 等