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