2017-09-24 8 views
1

カラム名がtagsで、タイプがVARCHARのMySQLテーブルがあります。私はカンマ区切りでデータを挿入しています:部分的な結果データを配列に入れて送信する

tag1, tag2, tag3, tag4, tag5, tag6 

ノードからの私のクエリは次のとおりです。クエリ上から

app.get('/tagtest', (req, res) => { 

    var tags = [];  // <= Not sure if I need this or how to push tags here. 

    connection.query("SELECT * FROM tagtestpost", (err, rows)=>{ 
     res.send(rows) 
    }); 

}); 

応答は次のとおりです。

[{"id":1,"tags":"tag1, tag2, tag3"},{"id":2,"tags":"tag2, tag4"}] 

私は内のタグを返したいです配列。だから、responseは、次のようになります。

[{"id":1,"tags":[tag1, tag2, tag3]},{"id":2,"tags":[tag2, tag4]}] 

私はこれをどのように達成することができますか?

UPDATE1

app.get('/showtagposts', (req, res) => { 

    connection.query("SELECT * FROM postwithtagtest", (err, rows)=>{ 

     var a = rows; 

    const expected = a.map((post) => ({ 
     ...post, 
     tags: post.tags.split(/,\s+/) 
    })); 

    console.log(expected); 

      res.json(expected); 
    }); 

}); 

答えて

1

受け入れ答えは、実際には、アレイ内の別々の値にタグを分割しません。次は行います。

const a = [{"id":1,"tags":"tag1, tag2, tag3"},{"id":2,"tags":"tag2, tag4"}]; 
 

 
    // ES6 
 
    const expected = a.map((post) => ({ 
 
     ...post, 
 
     tags: post.tags.split(/,\s+/) 
 
    })); 
 

 
    // ES5 
 
    const expected = a.map(function (post) { 
 
     return Object.assign({}, post, { 
 
      tags: post.tags.split(/,\s+/) 
 
     }); 
 
    }); 
 

 
    console.log(expected);

を更新

ノードを使用するときに広がり、オペレータがオブジェクトでは動作しないことが表示されます。ここをクリックしてください:Node v6 failing on object spread

代わりにObject.assignを使用するように変更しました。

app.get('/showtagposts', (req, res) => { 
    connection.query("SELECT * FROM postwithtagtest", (err, rows) => { 
     const data = rows.map((post) => { 
      return Object.assign({}, post, { 
       tags: post.tags.split(/,\s+/) 
      }); 
     }); 

     res.json(data); 
    }); 
}); 
+0

...投稿、 ^^^ SyntaxError:予期しないトークン... nodejsで適用するとこのエラーが発生する – Somename

+0

スニペットが私のために実行されます。あなたはES6を使っていますよね? – fubar

+0

ポストの前に '...'のための予期しないトークン(スプレッドオペレータ) – Somename

2

これは、あなたが望んでいたものを達成するためにMySQLの方法ではありません。私はJSあなたが必要とするものを達成する方法があります。

var a = [{"id":1,"tags":"tag1, tag2, tag3"},{"id":2,"tags":"tag2, tag4"}]; 
 
    var expected =[]; 
 
    a.forEach(function (eachObj){ 
 
     var obj = {}; 
 
     for (var key in eachObj) { 
 
      if (eachObj.hasOwnProperty(key) && key ==='tags'){ 
 
       obj[key] = [eachObj[key]]; 
 
      }else{ 
 
       obj[key] = eachObj[key]; 
 
      } 
 
     } 
 
     expected.push(obj); 
 
    }); 
 

 
    console.log(expected);

+0

これは機能します。一つの質問。配列内の引用符。それは大丈夫ですか? – Somename

+0

そうだと思います。 –

関連する問題