我正尝试通过使用 Form 在Express.js上使用GET方法返回一个特定用户的数据。但是,使用form时,它将返回所有值。
这是index.html代码:
<form action="http://localhost:1234/users" method="get">
id <input type="number" name="id" placeholder="enter id" /><br/>
</form>
和app.js代码:
app.get('/users/:id', (request, response) => {
const id = request.params.id;
pool.query(`SELECT * FROM users WHERE id = ${id}`, id, (error, result) => {
if (error) throw error;
response.send(result);
});
});
基本上,当我通过url http://localhost:1234/users/1
发送请求时,仅显示指定用户的数据。但是,当我使用 form 发送数据时,我看到的主要问题是URL,现在该URL变成了 http://localhost:1234/users?id=1
。因此,它将从数据库返回所有值。我该如何解决?我知道也许这很容易,但是作为node.js和express的新手,我已经尝试了几种方法,但是从形式上讲它不起作用。
答案 0 :(得分:0)
最自然的解决方案是使用Ajax在表单提交时发送查询,并禁用表单(<event>.preventDefault()
)的默认行为。
我将解决一种更hacky的方式,该方式不涉及修改客户端,而仅涉及服务器:
req.params.id
但未定义req.query.id
,或者如果定义了req.query.id
但未定义req.params.id
。app.get('/users/:id?', (request, response) => {
const paramId = request.params.id;
const queryId = request.query.id;
var id;
if(paramId && !queryId)
id = paramId;
else if(queryId && !paramId)
id = queryId;
if(!id)
return response.send('Please specify an id');
pool.query(`SELECT * FROM users WHERE id = ${id}`, id, (error, result) => {
if (error) throw error;
response.send(result);
});
});
有了这个,下面的URL就可以了:
http://localhost:1234/users/1
http://localhost:1234/users?id=1
不是:
http://localhost:1234/users/
http://localhost:1234/users/1?id=1