質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

4112閲覧

node.js + express4にてPOSTAPIを作成しましたが、charsetでエラーがでてしまいます。

hayapi

総合スコア6

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/01/31 11:06

###前提・実現したいこと
node.js + express4にてPOSTを行うAPIの作成をしています。
とある事情にて、POSTリクエストをするクライアントからはheaderのcontent-type:x-www-form-urlencoded;charset=Shift_JISが指定されている仕様であり、それを、node.js + express環境のPOSTAPIにてレスポンスを返しています。

APIにいたってはレスポンス自体は定型文を返すだけですので、問題がありませんが、リクエストデータが取得できない状態です。

expressにいたってはbody-parser moduleを使えば取得できるみたいですが、SJISは未対応のようです。。。

そもそもnode.jsではutf8 onlyなのは承知ですが、今回はこの環境で何とかしたいと考えています。

どうかご教授いただけますでしょうか。
###発生している問題・エラーメッセージ

module:body-parserにて以下のエラーが出ます。 UnsupportedMediaTypeError: unsupported charset "SHIFT_JIS

###該当のソースコード
//moduleの呼び出し
var express = require('/usr/lib/node_modules/express');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.urlencoded({extended: true}));

// POSTの処理
app.post('/', function (req, res) {
console.log(req.body);
res.header("Content-Type", "text/plain");
res.send('OK');
});

//portの指定
app.listen(3000);

module.exports = app;

###試したこと
クライアント側のリクエストheaderをx-www-form-urlencodedのみにした場合は、body-parserでリクエストデータを取得できました。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

body-parserにおいて、body-parser/lib/types/urlencoded.jsというjsファイルがあり、
これが、content-typeのcharset判定を行い、utf8以外はエラーを出す処理をしていました。

したがい、これを無効にすることで、charset指定に限らずbody-parserを実行することができました。

今回、このmoduleはこのAPIでしか使用しないので問題ありませんが、多用しようと思った場合は何か問題があるかもしれませんが・・・

// assert charset
var charset = getCharset(req) || 'utf-8'
/*if (charset !== 'utf-8') {
debug('invalid charset')
next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
charset: charset
}))
return
}
*/

投稿2017/02/01 00:50

hayapi

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こちらを参考にすればできるのではないかと

投稿2017/01/31 11:32

turbgraphics200

総合スコア4267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問