[MongoDB] SyntaxError: Unexpected end of input, Unexpected token } の解決方法
MongoDB shell で SyntaxError: Unexpected end of input や SyntaxError: Unexpected token } というエラーメッセージが発生したときの解決方法をご紹介します。
SyntaxError が発生するケース
SyntaxError が発生する MongoDB query のサンプルコードは以下の通りです。
MongoDB query
var sampleFunc = function(str){ var result = str.replace(/\"+/g, ''); return result; } |
実行結果
mongodb> var sampleFunc = function(str){ ... var str = 'a"b"c'; ... var result = str.replace(/\"+/g, ''); 2019-02-26T13:30:21.665+0000 E QUERY SyntaxError: Unexpected end of input mongodb> } 2019-02-26T13:30:21.669+0000 E QUERY SyntaxError: Unexpected token } |
ちなみに、関数定義
function sampleFunc (str){ var result = str.replace(/\"+/g, ''); return result; } |
SyntaxError が発生しないケース
関数内で正規表現リテラルを使わない
関数内で /\”+/g のようなダブルクオーテーション ” を含む正規表現リテラルを使わない場合は、SyntaxError が発生しませんでした。
var str = 'a"b"c'; var result = str.replace(/\"+/g, ''); |
String.prototype.replace()
正規表現リテラル /pattern/flags の pattern 部分に指定してるダブルクオーテーション ” が原因みたいなので、コンストラクタ記法 RegExp を利用するコードに書き換えるとエラーが発生しなくなりました。
var sampleFunc = function(str){ var result = str.replace(new RegExp('"+', 'g'), ''); return result; } |
SyntaxError の原因は?
今回は、ダブルクオーテーション ” が原因でしたが、エラーが発生したコードは Node.js repl では正常に動作しました。「恐らく MongoDB reql の処理に問題があるのではないか?」と考えてますが、詳しくコードを確認するには至ってません。
以上、MongoDB shell で SyntaxError が発生して困った現場からお送りしました。