Я хочу отправить с помощью jQuery Ajax PUT на экспресс-сервер Node.js объект, подобный следующему: {value: {tags: []}}
Проблема в том, что в обработчике экспресс app.put()
значение req.body.value
не определено. После некоторого теста я склонен обвинять jQuery, но я не уверен. Единственный обходной путь, который я нашел, - это преобразование пустого массива в массив с невозможным значением, которое я удаляю на сервере.
Вот клиент:
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title>MWE empty array problem</title>
<script src="jquery-3.3.1.min.js"></script>
</head>
<body>
<button>Push me!</button>
<script>
$("button").on("click", () => {
$.ajax("http://localhost:4321/", {
// dataType: "json", // This does not change the result
// contentType: 'application/json', // Also this does not change the result
data: {value: {tags: []}},
// data: {value: {tags: [""]}}, // This works, but it is not what I want
// data: {value: {tags: [], dummy: ""}}, // This gives an undefined req.body.value.tags
// data: {value: JSON.stringify({tags: []})}, // This gives an undefined req.body.value.tags
method: "PUT"
});
});
</script>
</body>
</html>
И сервер:
"use strict";
// > Load required modules
const express = require("express");
const bodyParser = require("body-parser");
// Initialize application
const app = express();
// PUT Updating document: the action is given as parameter
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({extended: true})); // for parsing application/x-www-form-urlencoded
app.put("/", function(req, res) {
console.log(req.body.value.tags);
res.sendStatus(200);
});
// > Serve static pages
app.use("/", express.static(__dirname));
// Start the server
app.listen(4321, () => console.log("Server running on port: 4321"));
Есть идеи?