node.js + expressで受けたPOSTのレスポンスが文字化けする問題の解消法

2016.09.03

おばんです、今週末こそ映画『君の名は。』を見るぞと心に誓い、前日夜に小説版を一気読みして温めたものの、どこの映画館も満席で不完全燃焼の田中です。

先日Qiitaにて以下の記事を書きました。
node.js + expressでPOSTを受け取る & POSTパラメータをJSONで取得する - Qiita

これでさて簡単なAPIが作れるぞ!
と思い立ち、普段慣れているiOSでクライアントを作って呼び出したものの日本語が文字化けする。
日本語の文字化けの回避方法です。

結論

なんのことはない、charset=utf-8;をheaderに指定する必要がありました。

環境

  • node.js: v6.2.2
  • express: 4.14.0
  • body-parser: 1.15.2

ソースコード

// Setup requires.
const express = require('express');
const bodyParser = require('body-parser');

// Setup server and uses.
const app = express();
app.use(bodyParser.urlencoded({
	extended: true
}));
app.use(bodyParser.json());

// Setup listen.
app.listen(3000);
console.log('Server is online.');

// Setup APIs.
// GET
app.get('/', function(req, res) {
	console.log('GET Request.');

	res.header('Content-Type', 'text/plain;charset=utf-8');
	
	res.end('GET承り太郎');
});

// POST
app.post('/', function(req, res) {
	console.log('POST Request.');

	const text = 'POST承り太郎' + req.body.name;

	res.header('Content-Type', 'text/plain;charset=utf-8');
	
	res.end(text);
});

解説

res.header('Content-Type', 'text/plain;charset=utf-8');

レスポンスヘッダの追加。Content-Typeをtext/plainに指定し、文字コードをUTF-8に指定する。

まとめ

うっかりです。
文字コードは指定しましょう。