试图删除一组项目来自客户端的sku代码。
import express from 'express';
import { pool } from './mysql';
import cors from 'cors';
import { config } from 'dotenv';
config();
const app = express();
app.use(express.json());
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, OPTIONS");
next();
})
app.use(cors());
app.delete('/delete/:sku', (request:any, response:any) => {
const sku = request.params.sku;
pool.getConnection((err:any, connection:any) => {
connection.query(
'DELETE FROM products WHERE sku IN (?)',
[sku],
(error:any, result:any, fields:any) => {
connection.release();
if (error) {
return response.status(400).json(error)
}
response.status(200).json({success: true});
}
)
})
});
app.listen(4000);
字符串
mysql.ts文件是为其他路由工作,但我可以编辑它,如果有人认为这是必要的。
Postman 发来了这个:
localhost:4000/delete?sku=JVC200123&sku=JVC200124
型
并接收这个:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot DELETE /delete</pre>
</body>
</html>
型
所有其他 Postman 的要求工作没有http://。不知道哪里是我的错误。
2条答案
按热度按时间mfpqipee1#
问题是,在这段代码中,对于快速路由,您有一个错误
字符串
它应该是:
型
localhost:4000/delete?sku=JVC200123&sku=JVC200124
指向/delete
而不是/delete/:sku
路由。因此,在您的情况下,:sku
路径变量是多余的,因为您希望使用多个项目的查询参数。此外,为了访问查询参数,您需要使用request.query
k2arahey2#
主要问题是request.params引用了路由的 path 部分。
request.query是你想要的。
request.query可以返回一个字符串、未定义或数组。在每种情况下都需要一个数组,可以是空数组(没有传入任何内容)、一个元素的数组(request.query是一个字符串)或多个字符串的数组(发送了一个格式为
/delete?sku=AAAA&sku=BBBB&sku=CCCC
的请求)因此,你需要一个helper函数来规范化输入:
字符串
你的快速路线应该是这样的:
型
我强烈建议使用更严格的Typescript类型,它可以在IDE中实现真正有用的兼容性功能。