2017-09-24 176 views
1

我有一個MySQL表,其中的列名是tags,類型是VARCHAR。我將用逗號分隔的數據:將部分結果數據推送到數組中併發送

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

... post, ^^^ 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

我這麼認爲,應該沒問題。 –

相關問題