概要
フロント側からjQuery.ajaxでNestJsサーバーの方へリクエストを送った際に、
型が全てstringになってしまいバリデーションが機能しないことがあったのでその解決策。
解決策
jQuery.ajax側で、以下の2点を明示して渡す。
・contentTypeを"application/json"に設定
・bodyをJSON.stringifyで括る
sample.js
$.ajax({
type : "Get",
url : "https://unko.com",
contentType : "application/json",
timeout : 1000,
data : JSON.stringify(obj)
}).done()
)}
原因
jQuery.ajaxはデフォルトで 1 "application/x-www-form-urlencoded"で送られるため。(クエリ形式)
注意点として、JSON.stringify()をしたからといって、Nest側で明示的にparseする必要はなく、例えば以下のような設定によって受け取り時にパースされる。
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
処理としてはここらへんになるが、この時"application/jsonを明示しないと、狂ったオブジェクトとして返ってくるので注意。(ここでハマった。)