Nodejs快速上手D2--ExpressJS

1.初次尝试express

javascript 复制代码
// 1.导入express模块
const express = require('express');
// 2.创建应用对象
const app=express();
// 3.创建路由
app.get('/home',(req,res)=>{
  res.end('hello express');
})
// 4.监听端口,启动服务
app.listen(9000,()=>{
  console.log('服务启动成功 端口9000监听中...');
})

2.express路由

路由组成:请求方法、路径、回调函数

javascript 复制代码
// 1.导入express模块
const express = require('express');
// 2.创建应用对象
const app=express();
// 3.创建路由
app.get('/home',(req,res)=>{
  res.end('hello express');
})
// 默认请求路由为'/'
app.get('/',(req,res)=>{
  res.end('home');
})
// 直接在地址栏敲回车则会报错,因为地址栏访问为get请求
app.post('/login',(req,res)=>{
  res.end('login');
})
app.all('/test',(req,res)=>{
  res.end('test');
})
// 当以上请求都不符合时,会执行以下路由(404处理)
app.use((req,res)=>{
  res.status(404).end('404 not found');
})
// 4.监听端口,启动服务
app.listen(9000,()=>{
  console.log('服务启动成功 端口9000监听中...');
})

使用post的方式进行请求(因为url直接访问都是发送get请求,所以定义一个表单进行post请求的发起)

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>
  <form method="post" action="http://localhost:9000/login">
    <button>登录</button>
    </form>
</body>
</html>

结果:

使用了通配符进行404的处理(当出现不没定义过的路由规则时)

3.获取请求报文参数

javascript 复制代码
const express = require('express');

const app=express();

app.get('/request',(req,res)=>{
  console.log(req.method);
  console.log(req.url);
  console.log(req.httpVersion);
  console.log(req.headers);

// 提取路径
console.log(req.path);
// 获取query参数
console.log(req.query);
// 获取请求的ip地址
console.log(req.ip);

  res.end('express request');
  })
app.listen(9000,()=>{
  console.log('express server running at http://127.0.0.1');
});

路径传入参数

结果

4.express获取路径参数

场景:京东或者淘宝等电商平台传入类似http://baidu/1288995.html 的商品信息,后端需要获取params(1288995),通过params返回对应的内容给前端

javascript 复制代码
const express = require('express');

const app=express();

// 此处填入一个id的占位符
app.get('/:id.html',(req,res)=>{
  // 获取路径参数id(要和占位符的名称一致)
console.log(req.params.id);
res.setHeader('Content-Type','text/plain; charset=utf-8');
res.end('商品详情');
  })
app.listen(9000,()=>{
  console.log('express server running at http://127.0.0.1');
});

4.1 练习:通过不同路由参数进行歌手信息查询

使用json定义几个歌手信息

json 复制代码
{
  "singers":[
    {
      "singer_name":"dua lipa",
      "singer_id":1,
      "singer_age":"25"
    },
    {
      "singer_name":"ariana grande",
      "singer_id":2,
      "singer_age":"50"
    },
    {
      "singer_name":"pinkpantheress",
      "singer_id":3,
      "singer_age":"20"
    },
    {
      "singer_name":"chappell roan",
      "singer_id":4,
      "singer_age":"20"
    },
    {
      "singer_name":"lana del rey",
      "singer_id":5,
      "singer_age":"32"
    },
    {
      "singer_name":"lorde",
      "singer_id":6,
      "singer_age":"60"
    }
  ]
}

思路:

使用require模块进行json文件导入

填入占位符+使用request.params属性获取用户填入的歌手id

使用find方法和内部回调函数获取对应的id,通过id返回对应的歌手信息(item)

在end中套入html骨架进行渲染

javascript 复制代码
const express = require('express');
// 导入json文件
const {singers}=require('./singer.json');
console.log(singers);
const app=express();

// 此处填入一个id的占位符
app.get('/singer/:singer_id.html',(req,res)=>{
// 获取路由参数
let {singer_id}=req.params;
// 在数组中寻找对应id的数据
res.setHeader('Content-Type','text/html; charset=utf-8');
let result=singers.find((item)=>{
  // id本来为字符串,这里需要使用Number进行强制类型转换
  if(item.singer_id===Number(singer_id)){
    return item;
  }
});

console.log(result);
// 将对应歌手信息渲染到html中
if(!result){
  res.statusCode=404;
  res.end('<h1>404</h1>');
}
  res.end(`<!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>
  <h1>${result.singer_name}</h1>
  <p>歌手ID:${result.singer_id}</p>
  <p>歌手年龄:${result.singer_age}</p>
</body>
</html>`);
  })
app.listen(9000,()=>{
  console.log('express server running at http://127.0.0.1');
});

结果:

相关推荐
Mr.45672 小时前
JDK17+Druid+SpringBoot3+ShardingSphere5 多表分库分表完整实践(MySQL+PostgreSQL)【生产优化版】
数据库·spring boot·后端
Qinana2 小时前
面试官想听什么?WebSocket协议升级、Koa实战与心跳机制全解析
后端·websocket·node.js
二哈赛车手2 小时前
策略模式新人笔记
后端
我叫黑大帅2 小时前
php 如何使用mysqli连接mysql
后端·面试·php
strayCat232552 小时前
4. Spring Boot 数据持久化(JPA)
java·spring boot·后端
杰杰7982 小时前
一文掌握在Flask使用SQLAlchemy(上)
后端·python·flask
Rabbit_QL2 小时前
[Token实战]Flask JWT 登录接口
后端·python·flask
荧焰2 小时前
Spring定时任务设计
后端
strayCat232552 小时前
2. Spring Boot 自动配置原理深度解析
java·spring boot·后端