Skip to content

Instantly share code, notes, and snippets.

@taktamur
Last active May 24, 2020 05:32
Show Gist options
  • Save taktamur/bd2f81800e09ecdd774c6695e45ac9e7 to your computer and use it in GitHub Desktop.
Save taktamur/bd2f81800e09ecdd774c6695e45ac9e7 to your computer and use it in GitHub Desktop.

node.jsのaxiosやexpressが、クエリパラメータで配列をどう扱うのかを調べてみた。

  • axiosは、配列を渡す場合、key名に[]を付ける
  • expressも、key名に[]があれば、配列とみなす
  • key名に[]が無くても、同じkey名があれば、expressは配列にする
    • ただし、[]が無いと、keyが1つだった時に値になり、keyが2つの場合に配列になったりと挙動が揺れる。
// axios {id:1}
// →url ?id=1
// →express {"id":"1"}
// axios {id:[2]}
// →url ?id[]=2 ←key名に[]がついてる
// →express {"id":["2"]} ←値は1個だけど、ちゃんと配列になってる
// axios {id:[3,4]}
// →url ?id[]=3&id[]=4
// →express {"id":["3","4"]}
// url ?id=a
// →express {"id":"a"} // 値"a"は値として入ってる
// url ?id=a&id=b
// →express {"id":["a","b"]} // 値"a"と"b"は配列として入ってる
var express = require("express");
var app = express();
app.get("/", function (req, res) {
console.log(JSON.stringify(req.query) + " " + req.originalUrl);
res.send("Hello World!");
});
app.listen(3000, function () {
// 起動したらaxiosでアクセス
const axiosBase = require("axios");
const axios = axiosBase.create({
baseURL: "http://localhost:3000", // バックエンドB のURL:port を指定する
responseType: "json",
});
axios.get("/", { params: { id: [] } }); // {} /
axios.get("/", { params: { id: 1 } }); // {"id":"1"} /?id=1
axios.get("/", { params: { id: [2] } }); // {"id":["2"]} /?id[]=2
axios.get("/", { params: { id: [3, 4] } }); // {"id":["3","4"]} /?id[]=3&id[]=4
axios.get("/", { params: { id: 5, id: 6 } }); // {"id":"6"} /?id=6
// ブラウザで?id=a とした場合: // {"id":"a"} /?id=a
// ブラウザで?id=a&id=b とした場合: // {"id":["a","b"]} /?id=a&id=b
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment