Nodejs app.put点击无效
Nodejs app.put点击无效
app.put(’/users/:name’,function(req,res){
var b = req.body;
Users.update(
{name:req.params.name},
{name:b.name,age:b.age,email:b.email},
function(err){
res.redirect("/users/"+b.name);
});
});
h1 new User
form(method=“POST”,action="/users")
p Name: input#name(type=“text”, name=“name”) p Email: input#email(type=“email”, name=“email”) p Age: input#age(type=“number” ,name=“age”) p: button(type=“submit”) Create
其他的添加删除都行就是修改不行不知道错在哪
要解决“Node.js app.put点击无效”的问题,我们需要确保以下几点:
- 请求方法:你需要使用PUT请求来更新用户信息,而不是POST。
- 表单提交:HTML表单默认只支持GET和POST方法。你可以通过JavaScript库(如axios或fetch API)发送PUT请求。
示例代码
Node.js服务器端代码
首先,确保你已经安装了Express和body-parser中间件:
npm install express body-parser
然后,更新你的服务器端代码:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 使用body-parser中间件解析请求体
app.use(bodyParser.json());
app.put('/users/:name', function(req, res) {
const { name, age, email } = req.body;
const updatedUser = {
name,
age,
email
};
Users.update({ name: req.params.name }, updatedUser, function(err) {
if (err) {
return res.status(500).send("Error updating user");
}
res.redirect(`/users/${req.params.name}`);
});
});
// 模拟的Users模型
let Users = {
update: function(filter, updatedUser, callback) {
// 这里可以替换为实际的数据库操作
console.log(`Updating user with filter: ${JSON.stringify(filter)}, updatedUser: ${JSON.stringify(updatedUser)}`);
callback(null); // 假设没有错误
}
};
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
客户端HTML和JavaScript代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Edit User</title>
</head>
<body>
<h1>Edit User</h1>
<form id="editForm">
<p>Name:</p>
<input id="name" type="text" name="name">
<p>Email:</p>
<input id="email" type="email" name="email">
<p>Age:</p>
<input id="age" type="number" name="age">
<button type="submit">Update</button>
</form>
<script>
document.getElementById('editForm').addEventListener('submit', function(event) {
event.preventDefault();
const formData = new FormData(event.target);
const data = Object.fromEntries(formData.entries());
fetch(`/users/${data.name}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(result => {
window.location.href = `/users/${data.name}`;
})
.catch(error => console.error('Error:', error));
});
</script>
</body>
</html>
解释
-
服务器端:
- 使用
body-parser
中间件解析请求体中的JSON数据。 app.put('/users/:name')
处理PUT请求,更新指定用户名的用户信息。Users.update
模拟数据库更新操作,实际应用中应替换为真实的数据库操作。
- 使用
-
客户端:
- 表单提交时阻止默认行为,使用JavaScript的
fetch
API发送PUT请求。 - 将表单数据转换为JSON格式,并发送PUT请求到服务器。
- 根据响应重定向到用户详情页面。
- 表单提交时阻止默认行为,使用JavaScript的
这样,你应该能够成功更新用户信息。
form(method="POST",action="/users")
form method是POST,对应是app.post,而非app.put
action是/users,无后缀,只能对应app.post(’/users’,function(req,res){… 若action是/users/alice,才能对应app.post(’/users/:name’,function(res,res){…
h1 update User
form(method=“POST”,action=’/users/#{user.name}’)
input(type=“hidden”, name="_method", value=“put”) p Name: input#name(type=“text”, name=“name”, value="#{user.name}") p Email: input#email(type=“email”, name=“email”, value="#{user.email}") p Age: input#age(type=“number” ,name=“age”, value="#{user.age}") p: button(type=“submit”) Update 这样的话还是不行的说
哦 我是新手啊 不知道怎么去表达,我加入日志功能了 我点击其他页面的时候有路径提示和时间,但是点击update更新按钮的时候什么反映都没。
从你的描述来看,问题可能出现在PUT
请求的处理上。在HTML表单中,默认的提交方法是POST
,而不是PUT
。为了使PUT
请求有效,你可以通过一些方式模拟PUT
请求。以下是几种常见的解决方案:
解决方案 1: 使用method-override
中间件
你可以使用method-override
中间件来模拟HTTP方法。首先安装这个中间件:
npm install method-override --save
然后在你的应用中配置它:
const express = require('express');
const methodOverride = require('method-override');
const app = express();
app.use(methodOverride('_method'));
// 确保你的表单有一个隐藏字段来指定模拟的HTTP方法
app.put('/users/:name', function (req, res) {
var b = req.body;
Users.update(
{ name: req.params.name },
{ name: b.name, age: b.age, email: b.email },
function (err) {
if (err) {
return res.status(500).send(err);
}
res.redirect("/users/" + b.name);
}
);
});
// 更新你的表单以包含隐藏的_method字段
<form method="POST" action="/users">
<input type="hidden" name="_method" value="PUT">
<p>Name:</p>
<input id="name" type="text" name="name">
<p>Email:</p>
<input id="email" type="email" name="email">
<p>Age:</p>
<input id="age" type="number" name="age">
<button type="submit">Update</button>
</form>
解决方案 2: 直接使用POST
如果你不想使用method-override
中间件,也可以直接将表单的method
设置为POST
,并在服务器端根据请求体中的某个字段(如_method: 'PUT'
)来处理PUT
逻辑。
选择适合你的方案,确保客户端和服务器端都能正确处理HTTP方法。