2017-09-24 140 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

我这么认为,应该没问题。 –

相关问题