学node写接口!!!

news2024/9/25 21:26:46

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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/495289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode中等】1419.数青蛙

给你一个字符串 croakOfFrogs&#xff0c;它表示不同青蛙发出的蛙鸣声&#xff08;字符串 “croak” &#xff09;的组合。由于同一时间可以有多只青蛙呱呱作响&#xff0c;所以 croakOfFrogs 中会混合多个 “croak” 。 请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。…

如何根据参考文献查找原文及详细的文献信息

当我们已知参考文献想要查看下载原文以及相关信息时可以用下面的方法&#xff1a; 例如这篇参考文献&#xff1a;Alsamhi S H, Almalki F, Ma O, et al. Predictive estimation of optimal signal strength from drones over IoT frameworks in smart cities[J]. IEEE Transac…

FPGA实现SDI视频解码PCIE传输 提供工程源码和QT上位机源码加技术支持

目录 1、前言2、我已有的SDI编解码方案3、我已有的PCIE方案4、总体设计思路和方案SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像缓存PCIE发送通路SDI同步输出通路 5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证SDI同步HDMI输出验证PCIE输出验…

neo4j结合gds实现最短路径算法

背景&#xff1a;Neo4j自带的cypher语句中的 shortestpath allShortestPaths 返回值内容非常有限&#xff0c;不易处理, 在实际生产环境中可用性极低&#xff0c; 且若带where条件查询时&#xff0c;查询效率极低 因此&#xff0c;使用Neo4j自带的插件如apoc来进行最短路径查询…

使用@Autowired、@Qualifier、@Primary注解自动装配组件

1.Autowired、Qualifier、Primary注解 1.1.Autowired注解 Autowired注解可以对类成员变量、方法和构造函数进行标注&#xff0c;完成自动装配的工作。 package org.springframework.beans.factory.annotation;import java.lang.annotation.Documented; import java.lang.ann…

hexo stellar主题添加运行时间-利用不蒜子

在网站的页脚想添加博客运行的时间以及&#xff0c;查了一下资料&#xff0c;根据下面的这个博主的代码进行了修改。 打造一个舒服的写作环境&#xff08;Hexo&#xff09; 下面我们开始修改&#xff1a; stellar/layout/_partial/main/footer.ejs 找到//footer的 这一段 // …

基于logback 实现springboot的日志配置

目录 一、前言 二、使用详解 2.1、打印到文件中 2.2、打印级别控制 2.3、logback 详细配置 2.4、logback 配置文件的组成 2.4.1、<root>标签 2.4.2、<contextName>标签 2.4.3、<property>标签 2.4.4、<appender>标签 2.4.5、<logger&g…

Mysql索引(2):索引结构

1 概述 MySQL的索引是在存储引擎层实现的&#xff0c;不同的存储引擎有不同的索引结构&#xff0c;主要包含以下几种&#xff1a; 索引结构描述BTree索最常见的索引类型&#xff0c;大部分引擎都支持 B 树索引 Hash索引 底层数据结构是用哈希表实现的, 只有精确匹配索引列的…

ShardingProxy分库分表实战

目录 ShardingProxy简述 快速使用 ShardingProxy部署 ShardingProxy使用 ShardingProxy的服务治理 Shardingproxy的其他功能 ShardingProxy的SPI扩展 ShardingSphere总结 ShardingProxy简述 ShardingProxy的功能同样是分库分表&#xff0c;但是他是一个独立部署的服务…

林曦讲座 | 关于“无用之美”的11个闪光

林曦老师的新书《无用之美》即将和大家见面啦~    究竟什么是“无用之美”呢&#xff1f;早在2013年&#xff0c;林曦老师就曾在“一席”做过一场关于“无用之美”的分享。2019年又在微软做过一次《中国人的闲情逸致——无用之美》的演讲。这次将两次演讲的内容精华整理出来…

【LeetCode】14. 最长公共前缀

1. 问题 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2 输入&#xff1a;strs [“dog”,“racecar”,“car”] 输出…

虹科动态 | 2023成都国际工业博览会精彩瞬间回顾

2023成都国际工业博览会&#xff08;CDIIF&#xff09;于中国国际西部博览城圆满落下帷幕。本届成都工博会紧紧围绕“工业引领&#xff0c;赋能产业新发展”主题&#xff0c;聚焦工业自动化、数控机床与金属加工、机器人、新一代信息技术与应用、工业互联网、新材料、节能与工业…

在VMware上对于CentOS虚拟机的克隆

一. 执行克隆操作 对已有的虚拟机右键&#xff0c;找到克隆操作&#xff0c;选择完整克隆&#xff0c;之后修改一下虚拟机名称和位置&#xff0c;点击完成即可。 克隆之后还需要修改一些东西&#xff0c;以防止运行期间的 ip 浮动之类的问题。 二. 修改配置 先关闭原来的虚拟…

三菱GOT2000人机界面设置用户报警和系统报警弹出报警显示的具体方法

三菱GOT2000人机界面设置用户报警和系统报警弹出报警显示的具体方法 弹出报警显示功能可以将用户报警、系统报警直接显示再各窗口上起到提示作用,在不切换窗口的情况下直观的提示客户当前设备报警信息。 该功能可以实现将当前发生的用户和系统报警,显示在各个窗口的指定位置(…

Springboot整合Jasypt实战

Springboot整合Jasypt实战 引入依赖 <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version> </dependency>配置jasypt # 配置jasypt相关信息…

PowerShell系列(一):PowerShell介绍和cmd命令行的区别

目录 1、cmd命令行窗口有哪些缺点呢&#xff1f; 2、PowerShell的产生 3、PowerShell优点 4、PowerShell使用场景 什么是Windows系统的命令行环境&#xff0c;之前我们在使用XP、Win7系统的时候&#xff0c;用的最多的就是微软官方自带的cmd命令窗口了&#xff0c;我们通过敲命…

面向万物智联的应用框架的思考和探索(下)

原文&#xff1a;面向万物智联的应用框架的思考和探索&#xff08;下&#xff09;&#xff0c;点击链接查看更多技术内容。 应用框架&#xff0c;是操作系统连接开发者生态&#xff0c;实现用户体验的关键基础设施。其中&#xff0c;开发效率和运行体验是永恒的诉求&#xff0c…

导轨式传感器差分信号转换模块隔离放大变送器0-±10mV/0-±20mV转0-10V/4-20mA

概述&#xff1a; DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源&#xff0c;向输…

Android+opencv实时人脸与人眼检测案例分享

软件版本&#xff1a; Android Studio Electric Eel 2022.1.1 Patch 2 https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download 创建工程并导入opencv sdk: 导入opencv sdk: File->New->Import Module 添加工程依赖&am…

如何利用超融合提升制造业开发测试效率 [附用户案例]

进入数字时代&#xff0c;越来越多的制造业企业正在通过自主研发的方式加速应用创新。由于研发效率在很大程度上取决于支持开发测试的服务器、存储等 IT 基础设施的性能&#xff0c;企业需要简单、灵活、高性能的 IT 基础架构&#xff0c;来为研发团队提供资源共享与快速交付支…