关于express post 在Nodejs中的使用
关于express post 在Nodejs中的使用
跟着 教程一步一步敲代码的时候 发现 <%- include header %> <form method=“post”> 标题:<br /> <input type=“text” name=“title” /><br /> 正文:<br /> <textarea name=“post” rows=“20” cols=“100”></textarea><br /> <input type=“submit” value=“发表” /> </form> <%- include footer %> 表单里不用加action 吗? app.post(’/login’,func)这样就能是处理/login页面接收到post请求?
当然可以!让我们来详细解释一下如何在Express中处理POST请求,并且说明为什么表单中可以不加action
属性。
表单中的 action
属性
在HTML表单中,action
属性指定了提交表单时应该发送到的URL。如果你没有指定action
属性,那么默认情况下表单会提交到当前页面的URL。因此,在你的例子中,如果用户点击“发表”按钮,表单将提交到当前页面的URL。
Express 中的 POST 请求处理
在Express中,你可以使用路由处理器来处理不同类型的HTTP请求,包括POST请求。以下是一个简单的示例,展示如何设置一个处理POST请求的路由:
安装依赖
首先,确保你已经安装了Express:
npm install express
创建服务器
接下来,创建一个基本的Express应用来处理POST请求:
const express = require('express');
const app = express();
const port = 3000;
// 使用body-parser中间件解析请求体
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
// 处理GET请求,渲染表单
app.get('/', (req, res) => {
res.send(`
<!DOCTYPE html>
<html>
<head>
<title>发表文章</title>
</head>
<body>
<form method="post">
标题:<br />
<input type="text" name="title" /><br />
正文:<br />
<textarea name="post" rows="20" cols="100"></textarea><br />
<input type="submit" value="发表" />
</form>
</body>
</html>
`);
});
// 处理POST请求,处理表单数据
app.post('/', (req, res) => {
const { title, post } = req.body;
res.send(`感谢您的投稿!\n标题:${title}\n正文:${post}`);
});
// 启动服务器
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
解释代码
- 引入依赖:我们首先引入了
express
和body-parser
模块。 - 配置中间件:使用
bodyParser.urlencoded
来解析表单提交的数据。 - 处理GET请求:当用户访问根路径(
/
)时,我们返回一个包含表单的HTML页面。 - 处理POST请求:当用户提交表单时,我们从
req.body
中获取表单数据,并返回一条确认信息。 - 启动服务器:最后,我们启动服务器并监听端口。
通过这种方式,你可以轻松地在Express应用中处理POST请求,并实现表单数据的提交和处理。
在Express中处理POST请求时,如果你没有明确指定<form>
标签的action
属性,默认情况下表单会提交到当前页面的URL。因此,如果当前页面的URL是/
,那么提交表单时会发送一个POST请求到/
。
你可以通过app.post()
方法来定义处理该路径上POST请求的逻辑。例如,如果你有一个简单的表单用于创建新文章,可以按照以下步骤进行操作:
示例代码
-
HTML 表单
<form method="post"> 标题:<br /> <input type="text" name="title" /><br /> 正文:<br /> <textarea name="post" rows="20" cols="100"></textarea><br /> <input type="submit" value="发表" /> </form>
-
Express 路由处理
const express = require('express'); const app = express(); app.use(express.urlencoded({ extended: true })); // 解析表单数据 app.post('/', (req, res) => { const title = req.body.title; const post = req.body.post; console.log(`Received POST request: Title=${title}, Post=${post}`); // 处理表单数据 res.send('表单已接收并处理'); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
在这个例子中:
- 表单提交时默认会向当前页面的URL(这里是
/
)发送POST请求。 express.urlencoded({ extended: true })
中间件用来解析提交的表单数据。app.post('/', ...)
定义了处理/
路径上的POST请求的回调函数。req.body
包含了从表单提交的数据。
这样,当你提交表单时,Express会接收到POST请求,并且可以通过req.body
访问到表单字段的值。