【问题标题】:Push partial result data in array and send将部分结果数据推入数组并发送
【发布时间】:2017-09-24 15:31:33
【问题描述】:

我有一个 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]}]

我怎样才能做到这一点?

更新1

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);
    });

});

【问题讨论】:

    标签: mysql node-mysql


    【解决方案1】:

    这不是 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);

    【讨论】:

    • 行得通!一个问题。数组内的引号。可以吗?
    • 我觉得应该没问题。
    【解决方案2】:

    接受的答案实际上并未将标签拆分为数组中的单独值。以下是:

        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.js 时,扩展运算符似乎不适用于对象。见这里: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);
        });
    });
    

    【讨论】:

    • ...post, ^^^ SyntaxError: Unexpected token ... 在nodejs中应用时出现此错误
    • sn-p 为我运行。而且你使用的是 ES6,对吧?
    • 您复制了我发布的内容吗?包括包装返回值的额外()
    • 我做到了。请检查问题中的 UPDATE1。谢谢
    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多