fs 可以读取文档
fs.readFild() 用于读取文件 第一个参数 路径 第二个参数 "utf8"(默认值) 第三个参数 函数 function(err , dataStr ){
第一个参数是错误, 第二个参数是正确的可以拿到读取文件里面的值
}
fs.writeFile() 用于创建文件添加内容 第一个参数 创建文件的路径, 第二个参数 添加的内容 , 第三个参数 "utf8" ,第四个参数 函数 functtion( err ){
只有一个错误参数
}
__dirname 的使用
__dirname+' / 文件名' 看清楚 / 前面不添加 ./ 或 ../
path直接就解决了这个问题
path.join(__dirname, "./123.txt") // 用于拼接路径
path.basename(bPath, ".html"); // 用于获取文件的名字 第二参数可以去除后缀
path.extname(extPath); // 直接获取文件的后缀
正则表达式 取指定标签里面指定的全部内容 : /<style>[\s\S]*<\/style>/
js的一个方法 replace(" 指定的被转换的东西 " , " 转化的东西 " )
使用http 写服务器 重点:给服务器绑定request绑定事件 监听客户端请求
// 引入 http 模块
const http = require("http");
// 创建服务器
const server = http.createServer();
// 绑定request 事件 监听 客户端请求
server.on("request", function (req, res) {
console.log("服务器触发了");
});
// 启动服务器
server.listen(8080, function () {
console.log("服务器启动了 172.0.0.1:8080");
});
req和res 的使用和认识
req 可以获取到请求路径 (req.url) 和 请求方式 (req.method)
res.setHeader("Content-Type", "text/html; charset=utf-8"); // 设置请求头
res.end(相应给客户端的东西)
CommonJS 导出
require('./text.js') //获取到的是 text.js 文件 module.exports = { } 里面的数据 默认是 { }
exports.name = "sd"; // 也可以直接进行导出
第三方插件 显示时间
1. npm i moment npm 安装
2. const moment = require('moment') // 使用require 进行导出后注册
3. 使用 const time = moment().format("YYYY-MM-DD HH:mm:ss"); //
express 框架的使用
基础使用
1. 引入express框架
2. 实例化express ()
3. 指定端口启动服务器
const express = require("express"); // 引入express 框架
const app = express(); // 实例化
app.listen(8080, () => { // 指定端口 启动服务器
console.log("服务器启动了 127.0.0.1:8080");
});
使用express 写 get请求和post请求
1. 使用res.send({name:""}) // 发送到客户端
2. 使用req.query 来获取到客户端传输到服务端的数据
3. 使用req.params 获取到 路由后面的动态参数
const express = require("express");
const app = express();
// 基础的get请求
app.get("/user", (req, res) => {
// console.log(res);
res.send({ name: "zs", age: "12", sex: "🚹" }); // 相应到客户端
});
// 基础的post请求
app.post("/user", (req, res) => {
console.log("执行成功了");
res.send("post请求执行成功了"); //相应到客户端
});
// 在客户端传参数,使用req.query获取参数 请求方式位get请求
app.get("/userquery", (req, res) => {
console.log("获取到客户端发送过来的查询参数:", req.query);
res.send(req.query);
});
// 在客户端传参,使用req.query 请求方式位post
app.post("/userquery", (req, res) => {
res.send(req.query); //获取到客户端发送过来的请求
});
// 在服务端设置动态参数,客户端传输之后 使用parmas获取到 get请求
app.get("/userparams/:id", (req, res) => {
res.send(req.params);
});
// 在服务端设置动态传参,客户端传输之后 使用params获取到 post请求
app.post("/userparams/:ids", (req, res) => {
res.send(req.params);
});
app.listen(8080, () => {
console.log("服务器启动了 http://127.0.0.1:8080");
});
模块化路由
1. 引入 express框架
2. 实例化Router express.Router()
3.使用router.get () 请求
4.在主文件中 const router = reuqire('./router.js')引入
5.app.use('/api',router) //挂在到app 上
路由具体写法:
// const router =
const express = require("express");
const router = express.Router();
router.get("/user/list", (req, res) => {
res.send("get请求成功了");
});
router.post("/user/add", (req, res) => {
res.send("post Add请求成功了");
});
module.exports = router;
对路由引入和挂载 (主文件)
// 创建一个服务器
const express = require("express");
// 引入模块化后的路由
const router = require("./02.模块化具体的路由");
const app = express();
// 讲路由use() 到app上 同时设置 公共的请求前缀/api
app.use("/api", router);
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
中间件的使用
全局中间件
1. 直接讲公共的数据和方法 app.use() 上面
//引入express
const express = require("express");
const app = express();
// 设置一个中间件
let middleOne = (req, res, next) => {
console.log("第一个中间件执行了");
const timenew = Date.now();
req.timenew = timenew;
next();
};
let middleTwo = (req, res, next) => {
console.log("第二个中间件执行了");
next();
};
app.use(middleTwo, middleOne);
app.get("/", (req, res) => {
res.send("get请求的 / 执行了" + req.timenew);
});
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
局部中间件 (路由中间件和找个使用一样)
1. 中间件的有三个参数 最后一个next 在函数中一定要最后代码写完之后一定要进行调用 next()
2. 放在app.get ('/user' , 中间件 , 中间件 , 中间件 ,function (req,res) {} ) 无论多少个中间件都是放在中间进行调用
const express = require("express");
const app = express();
let middle = (req, res, next) => {
console.log("第一个局部中间件执行了");
next();
};
let middleTwo = (req, res, next) => {
console.log("第一个局部中间件执行了");
next();
};
// 第一个参数是路径 ,最后一个参数式函数执行的结果
app.get("/", middle, middleTwo, function (req, res) {
res.send("get / 执行成功");
});
app.post("/", function (req, res) {
res.send("post / 执行成功");
});
app.listen(8080, () => {
console.log("http://127.0.0.1");
});
错误中间件
1. 必须最后面来执行 用来捕获前面的错误 从而避免整个页面瘫痪
const express = require("express");
const app = express();
app.get("/", (req, res) => {
throw new Error("错误信息");
res.send("Hello World");
});
app.use((err, req, res, next) => {
res.send("Error:" + err.message); // 错误中间件 拦截必须用 +
});
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
内置中间件的使用
1 .app.use(express.json()); // json格式的解析
2. app.use(express.urlencoded({ extended: false })); // 键值对的解析
3. app.use(express.static("./clock")); // 向外托管静态资源 // express.static('文件名字') //这里面设置的文件名字在路径上不写
第三方中间件
1. npm i body-parser // 下载安装
2. const bodyParser = require("body-parser"); // 实例化
3. app.use(bodyParser.urlencoded({ extended: false })); // 使用
body-parser 与 内置中间件 express.urlencoded 使用雷同 知道 那个express.urlencoded中间件是以这个body-parser第三方来封装出来的 就行了
请求模块
1.引入express 实例化后
2.在express里面拿到Router()
3.module.exports = router 导出
4.中间写router.get('/user',(req,res)=> {
req.query( ) //获取url 上面的数据时,
req.params() //获取url上面的动态参数
req.body( ) 获取客户端发送过来的请求
res.send( ) 相应给客户端的
})
const express = require("express");
const router = express.Router();
router.get("/user", (req, res) => {
console.log("req.dara", req.query);
res.send({
status: "0",
msg: "请求成功",
data: req.query,
});
});
router.post("/user", (req, res) => {
let body = req.body;
console.log(body);
res.send({
status: "0",
msg: "post请求成功了",
data: body,
});
});
module.exports = router;