nodejs之express框架学习

01_express初体验

// 导入 express
const express = require('express');

// 创建应用对象
const app = express();

// 创建路由
app.get('/home', (req,res)=>{
    res.end('hello, express');
})

// 监听端口,启动服务
app.listen(3000, () => {
    console.log('服务已经启动,端口3000正在监听中...')
})

02_express路由

//一个路由的组成有请求方法、路径和回调函数组成
// 导入express
const express = require("express");
// 创建应用对象
const app = express();
// 创建get请求
app.get("/home", (req, res) => {
  res.end("I am homePage");
});
// 创建post请求
app.post("/login", (req, res) => {
    res.end('I am login')
});
// 不限制请求方法
app.all("/login", (req, res) => {
    res.end('I am login')
});
// 不限制请求方法,通常用于托底路由规则
app.all("*", (req, res) => {
    res.end('404 Not Found')
});
app.listen(3000,()=>{
    console.log('服务已经启动,端口3000正在监听中...')
})

03_获取请求参数

/**
 * 获取本机的ip=》cmd => ipconfig
 */
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);
    // express操作
    console.log(req.path);//获取请求地址
    console.log(req.query);//获取请求参数
    console.log(req.ip);//获取ip
    console.log(req.get('host'))//获取主机
    res.end('get params')
    // 获取请求头
})

app.listen(3000,()=>{
    console.log('服务已经启动,端口号为3000...')
})

04_获取路由参数

// 导入express
const express = require("express");
// 创建应用实例
const app = express();
// 创建路由
app.get("/:id.html", (req, res) => {
  //在路由中添加参数占位符,类似于:id这种形式
  // 获取路由参数 req.params
  console.log(req.params.id);
  res.end("hello express");
});
//监听端口,启动服务
app.listen(9000, () => {
  console.log("服务启动,端口号为9000...");
});

05_响应设置

const express = require("express");

const app = express();

app.get("/other", (req, res) => {
    // 原生响应
    // res.statusCode = 404;
    // res.statusMessage = 'love';
    // res.setHeader('xxx','yyy');
    // res.write('hello http');
    // res.end('response setting')
    // express 响应
    // res.status(503);
    // res.set('aaa','bbb');
    // res.send('你好,express') // 无需设置字符集,express自动识别
    res.status(500).set('abc','def').send('这些都是OK的') // 可以进行链式设置响应体
});

app.listen(3000, () => {
  console.log("服务已启动...");
});

06_其他响应

const express = require("express");

const app = express();

app.get("/other", (req, res) => {
  // 跳转响应
  //   res.redirect("http://atguigu.com");
  // 下载响应
  //   res.download(__dirname+'/package.json')
  // JSON响应
  //   res.json({
  //     name: "山里的闲人",
  //     zuoyoum: "赚更多的钱",
  //   });
  // 响应文件内容
  res.sendFile(__dirname + '/test.html')
});

app.listen(3000, () => {
  console.log("服务已启动...");
});

07_全局中间件

const express = require("express");
const fs = require("fs");
const path = require("path");

const app = express();

function recordMiddleware(req, res, next) {
  let { url, ip } = req;
  fs.appendFileSync(
    path.resolve(__dirname, "./access.log"),
    `${url}  ${ip}\r\n`
  );
  // 调用next
  next();
}

// 使用中间件函数
app.use(recordMiddleware);

app.get("/home", (req, res) => {
  res.send("前台首页");
});

app.get("/login", (req, res) => {
  res.send("登录页");
});

app.all("*", (req, res) => {
  res.send("<h1>404 Not Found<h1>");
});

app.listen(3000, () => {
  console.log("服务已经启动...");
});

08_路由中间件

const express = require("express");

const app = express();

let checkCodeMiddleware = (req, res, next) => {
  if (req.query.code === "521") {
    next();
  } else {
    res.send("暗号错误");
  }
};

app.get("/home", (req, res) => {
  res.send("前台首页");
});

app.get("/login", checkCodeMiddleware, (req, res) => {
  res.send("登录页");
});

app.get("/setting", checkCodeMiddleware, (req, res) => {
  res.send("设置页面");
});

app.all("*", (req, res) => {
  res.send("<h1>404 Not Found<h1>");
});

app.listen(3000, () => {
  console.log("服务已经启动...");
});

09_静态资源中间件

/**
 * 注意事项:
 * 1、index.html文件为默认打开资源
 * 2、如果静态资源与路由规则同时匹配,谁先匹配上就响应谁
 * 3、路由响应动态资源,静态资源中间件响应静态资源
 */
const express = require('express');

const app = express();

app.use(express.static(__dirname+'/public'));

app.get('/home',(req,res)=>{
    res.send('你好');
})

app.listen(3000, ()=>{
    console.log('服务已经启动...')
})

10_获取请求体数据

// 需要使用插件body-parser
const express = require("express");
const bodyParser = require("body-parser");
// 解析JSON格式的请求体的中间件
// var jsonParser = bodyParser.json()

//解析querystring格式请求体的中间件
var urlencodedParser = bodyParser.urlencoded({ extended: false });
const app = express();

app.get("/login", (req, res) => {
  res.sendFile(__dirname + "/login.html");
});

app.post("/login", urlencodedParser, (req, res) => {
  console.log(req.body);
  res.send("登录成功");
});

app.listen(3000, () => {
  console.log("服务器启动成功");
});

11_图片防盗链

const express = require("express");

const app = express();

app.use((req, res, next) => {
  //获取请求头中的referer
  let referer = req.get("referer");
  console.log(referer);
  if (referer) {
    let { hostname } = new URL(referer);
    if (hostname !== "127.0.0.1") {
      res.status(404).send("<h1>404 Not Found</h1>");
      return;
    }
  }
  next();
});

app.use(express.static(__dirname + "/public"));

app.listen(3000, () => {
  console.log("服务已经启动...");
});

12_路由模块化

const express = require("express");

const app = express();

const homeRouter = require("./routes/homeRouter.js");
const adminRouter = require("./routes/adminRouter.js");

app.use(homeRouter);

app.use(adminRouter);

app.all("*", (req, res) => {
  res.send("<h1>404 Not Found<h1>");
});

app.listen(3000, () => {
  console.log("服务已经启动...");
});

routes文件夹

// adminRouter.js
const express = require("express");

const router = express.Router();

router.get("/home", (req, res) => {
  res.send("前台首页");
});

router.get("/search", (req, res) => {
  res.send("内容搜索");
});

module.exports = router;
//homeRouter.js
const express = require("express");

const router = express.Router();

router.get("/admin", (req, res) => {
  res.send("后台首页");
});

router.get("/setting", (req, res) => {
  res.send("设置中心");
});

module.exports = router;
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值