0%

const xiyou = ["唐僧", "猪八戒", "沙僧", "孙猴子"];
const fs = require("fs");
const ejs = require("ejs");

//原生js
// let str = "";
// xiyou.forEach((item) => {
//   str += `<li>${item}</li>`;
// });

let html = fs.readFileSync("./02_西游.html").toString();

let str = ejs.render(html, { xiyou });

console.log(str);
<!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>
    <% xiyou.forEach((item) => { %>
    <li><%=item%></li>
    <%})%>
  </body>
</html>

//模板引擎是分离 用户界面和业务数据 的一种技术
//分离html和js

//导入EJS
const ejs = require("ejs");

const fs = require("fs");

let china = "中国";

let str = fs.readFileSync("01_html.html").toString();

let result = ejs.render(str, { china, china });

console.log(result);
<!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><%=china%></h1>
  </body>
</html>

//只允许127.0.0.1访问

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

//创建中间件
app.use((req, res, next) => {
  //检测请求头中的是否有127.0.0.1
  //获取referer
  let referer = req.get("referer");
  if (referer) {
    //实例化
    let url = new URL(referer);
    //获取hostname
    let hostname = url.hostname;
    //判断
    if (hostname != "127.0.0.1") {
      //响应404
      res.status(404).send("<h2>404</h2>");
      return;
    }
  }
  next();
});

//静态资源文件设置
app.use(express.static(__dirname + "/public"));

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

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

//静态资源文件设置
//默认打开静态资源文件下的index.html文件
//路由负责响应动态资源,静态资源中间件负责响应静态资源
app.use(express.static(__dirname + "/public"));

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

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

const express = require("express");
const fs = require("fs");
const path = require("path");
//创建应用对象
const app = express();

//创建路由中间件
let checkCodeMiddleware = (req, res, next) => {
  if (req.query.code == "521") {
    //若匹配成功则执行后续的路由回调
    next();
  } else {
    res.send("暗号错误");
  }
};

//创建路由
app.get("/front", (req, res) => {
  res.send("前台首页");
});

app.get("/back", checkCodeMiddleware, (req, res) => {
  if (req.query.code == "521") {
    res.send("后台首页");
  } else {
    res.send("暗号错误");
  }
});

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

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

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

const express = require("express");
const fs = require("fs");
const path = require("path");
//创建应用对象
const app = express();

//声明全局中间件
function recordMiddleFileSync(req, res, next) {
  //获取url和ip
  let { url, ip } = req;
  //将访问信息保存在acess.log文件中
  fs.appendFileSync(
    path.resolve(__dirname, "./acess.log"),
    `${url}  ${ip}\r\n`
  );

  //调用next,让他去执行后续的路由回调
  next();
}

//使用全局中间件
app.use(recordMiddleFileSync);

//创建路由
app.get("/front", (req, res) => {
  res.send("前台首页");
});

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

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

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

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

//创建路由
app.get("/response", (req, res) => {
  //原生响应
  //   res.statusCode = 404;
  //   res.statusMessage = "love";
  //   res.setHeader("xxx", "yyy");
  //   res.write("write");
  //   res.end("hello express");

  //express
  res.status(500).set("abc", "def").send("这都是OK");
  //设置状态码,响应头,响应体
});

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

其他响应设置

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

//创建路由
app.get("/other", (req, res) => {
  //跳转响应
  //res.redirect("http://lzkpersonal.com.cn");
  //下载响应
  res.download(__dirname + "/test.html");
  //Josn响应
  //   res.json({
  //     name: "我的",
  //   });

  //响应文件内容
  res.sendFile(__dirname + "/test.html");
});

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

<script>
      const s1 = new Set([1, 2]);
      console.log(s1.size); //2

      //自动去重
      const s2 = new Set([1, 2, 2, 3]);
      console.log(s2.size); //3
      let [...arr] = s2;
      console.log(arr); //[1,2,3]

      //set 中的对象实例方法
      //add添加
      s2.add(4).add(5);
      console.log(s2.size); //5

      //delete返回一个布尔值,代表是否删除成功
      let bol = s2.delete(5);
      console.log(bol); //true
      console.log(s2.size); //4

      //has表示判断是否含有相应的值,返回一个布尔值
      let bol2 = s2.has(5);
      console.log(bol2); //false

      //clear代表清空所有数据
      //   s2.clear();

      //遍历set数据结构
      s2.forEach((item) => {
        console.log(item); //1,2,3,4
      });
    </script>

<script>
      //箭头函数不能使用普通函数中的arguments
      const sum = (...args) => {
        let total = 0;
        args.forEach((item) => {
          total += item;
        });
        return total;
      };
      console.log(sum(10, 20)); //30
      console.log(sum(10, 20, 30)); //60

      //解构赋值和剩余参数配合使用
      let arr = ["1", "2", "3"];
      let [s1, ...s2] = arr;
      console.log(s1); //'1'
      console.log(s2); //['2','3']
    </script>

<script>
      //箭头函数中的this指向所在作用域的this
      //由于对象不产生作用域,所以this就指向全局作用域
      var age = 100;
      let obj = {
        age: 20,
        say: () => {
          console.log(this.age);
        },
      };
      obj.say(); //100
    </script>