Node.js
原生态的js运行在前端。
Node.js:他与原生态JS最大的不同,就是前端只能看到输出的代码,而看不到jS文件
req接收,res回显
dirname获取绝对路径
提交表单 :
“Post路由” 到底是什么。
这是一个非常核心的Web开发概念。我们可以把它拆成两部分来理解:“路由” 和 “POST方法”。
---
1. 首先,什么是“路由”?
想象一下现实世界中的邮局:
· 地址:比如“北京市海淀区中关村大街27号”。这个地址唯一地指定了一个位置。
· 路由:邮局的工作人员看到这个地址,就知道应该把这封信交给“北京市海淀区中关村大街27号”的收发室。
在Web服务器里,这个“收发室”就是一段处理函数。
所以,路由 就是一套映射规则。它告诉服务器:
“当有人访问 这个URL(地址)并使用 这种HTTP方法(比如GET或POST)时,你就应该把请求交给 这段代码(处理函数)来负责。”
一个路由由三个关键部分组成:
1. HTTP方法:GET, POST, PUT, DELETE等。
2. URL路径:例如 /login, /users, /articles/123。
3. 处理函数:一段具体的服务器端代码。
---
2. 然后,什么是“POST方法”?
HTTP协议定义了几种不同的“动作”来表达客户端的意图,最主要的就是GET和POST。
· GET:意思是“获取”。主要用于向服务器索取数据(比如请求一个网页、查询信息)。数据通过URL参数传递。
· POST:意思是“发送”或“提交”。主要用于向服务器提交数据(比如提交登录表单、上传文件)。数据放在请求的主体(Body) 里,不会显示在URL中,更安全,也能传输更多内容。
---
3. 所以,“Post路由”到底是什么?
Post路由就是一条专门处理HTTP POST请求的映射规则。
它本质上是一条指令,告诉服务器:
“嘿,如果有人向 /login 这个地址发送(POST) 数据过来,你别管别人,就把这个请求交给我指定的这个函数来处理。”
它的工作流程如下图所示,清晰地展示了从客户端提交数据到服务器返回响应的完整过程:
```mermaid
flowchart TD
A[客户端 Client<br>如浏览器] -->|1. 发送POST请求<br>URL: /login<br>Body: 用户名、密码| B[服务器 Server]
subgraph B[服务器 Server]
B1[接收请求]
B2{路由匹配?}
B2 -- 是 --> B3[POST路由<br>路径: /login<br>方法: POST]
B3 --> B4[处理函数<br>1. 从Body提取数据<br>2. 查询数据库验证<br>3. 创建会话]
B2 -- 否 --> B5[返回404错误]
end
B4 -->|4. 返回响应<br>重定向到/home或返回错误信息| A
```
一个具体的例子(Node.js + Express 框架)
```javascript
// 1. 引入Express框架
const express = require('express');
const app = express();
// 允许解析JSON格式的请求体
app.use(express.json());
// 2. 定义一个处理 GET 请求的路由
// 当用户用浏览器访问 /login 时,返回一个登录表单页面
app.get('/login', (req, res) => {
res.send(`
<form action="/login" method="POST">
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<button type="submit">Login</button>
</form>
`);
});
// 3. 定义的就是一个 【POST路由】!
// 当用户提交上面的表单时,表单数据会以POST方式发送到 /login
app.post('/login', (req, res) => { // 注意这里的方法是 `post`
// 处理函数开始工作:
// 1. 从请求Body中提取客户端发送过来的数据
*路由就是看每个Http发送过来的地址与方法,并将它送到相应的处理轨道。
post提交,get收
req query获取urL查询参数的字符串(get)
Post参数,把数据存储在数据体中
Get才是URL
如果这个东西要用post传的话,那就得要引用一个库:
安全问题
黑盒测试:
这张图片展示的是HTTP请求的响应头信息,其中能明确的实体信息有:
- Web应用的技术栈:通过 X-Powered-By: Express 可知,这个Web应用是用 Express框架(Node.js生态中常用的Web开发框架)开发的。
- 请求结果:状态码为 404 Not Found ,表示客户端请求的资源在服务器上“未找到”。
- 其他响应头细节:还包含一些安全、连接相关的配置(如 Content-Security-Policy 用于安全策略限制, Keep-Alive 用于长连接保持等)。
这玩意儿黑盒测试可以看框架↑
SQL注入:
*通过用户端DIR传递,所以容易注入。
在 Node.js 的 Express 框架(或类似 Web 开发场景)中:
- req 是 request 的缩写,代表请求对象,包含客户端向服务器发送的所有请求信息(如请求参数、请求头、请求方法等)。
- res 是 response 的缩写,代表响应对象,用于服务器向客户端返回响应(如设置响应内容、响应头、结束请求等)。
简单说: req 管“收请求”, res 管“发响应”。
原型链污染:
先找自身,再找逻辑链:
let foo={bar:1}
此时,foo.bar值等于1
Foo.__proto__.bar=2,修改foo原型的bar的属性为2
因为查找顺序,foo→bar(已被占用,已经拥有自己的bar属性),Foo.bar依然是1
当我们再创造一个新的对象zoo
zoo.bar=2了,因为公共原型被污染,而他自己也是空的,所以变成了2
Foo.proto.bra是从foo中查找bra这个最终原型,并把公共的bra(公共原型)进行修改。
就是通过foo直接用那啥函数直接查你老祖宗是谁并且进行修改。