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

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

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

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

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

Q&A

1回答

810閲覧

Node.jsのrequestでセミコロン区切りのURLにリクエスト

ariari

総合スコア18

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

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

0グッド

1クリップ

投稿2018/04/26 08:33

表題の件について質問させてください

とあるAPIにNode.jsのsync-requestモジュールでGETリクエストを送信しています。
このAPIのパラメータがセミコロン区切りになっていて(例:http://example.com/api;param1=a;param2=b)、requestのqsオプションでは正しいリクエストを送信できなかったので、関連するモジュールを直接いじって実現しました。

これはこれで動いてるのですが、何か気持ち悪くて、、共有する時に困りますし。

これ以外に良い方法はありますでしょうか?


function getData(a, b) { var res = request('GET','http://example.com/api', { qs: { param1: a, param2: b } }); var body = res.getBody('utf8'); return body; } // 以下だとParse Errorになります function getData(a, b) { var url = 'http://example.com/api;param1='+a+';param2='+b; var res = request('GET', url); var body = res.getBody('utf8'); return body; }

then-requestモジュール

// lib/handle-qs.js - 14行目 qs = '?' + qs; ↓ qs = ';' + qs;

qsモジュール

// lib/stringify.js - 21行目 delimiter: '&', ↓ delimiter: ';',

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

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

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

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

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

guest

回答1

0

urlをsplit(';')で区切ってしまって、
lengthが1ならGETパラメータ無し。
lengthが2以上なら0をPATH、1以上をGETパラメータとして利用する想定はいかが?

コードにするとこんな感じです。

JavaScript

1var main = function (url) { 2 var parsed = url.split(';'); 3 if (parsed.length === 1) return url; 4 return parsed[0] + '?' + parsed.slice(1).join('&'); 5} 6console.log(main('http://example.com/hoge')); 7// http://example.com/hoge 8console.log(main('http://example.com/hoge;piko=123')); 9// http://example.com/hoge?piko=123 10console.log(main('http://example.com/hoge;piko=123;piyo=234')); 11// http://example.com/hoge?piko=123&piyo=234

投稿2018/04/26 13:51

miyabi-sun

総合スコア21158

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問