在nodejs中通过pg-promise将wkt列表存储在对象内部

时间:2018-10-18 06:59:24

标签: node.js pg-promise

我想通过nodejs和pg-promise库将该对象存储到postgresql中: enter image description here

这是我的方法:

%store -r img_path
image_path = img_path
%store image_path
%store -d img_path

所以按顺序创建了ColumnSet:

    saveLineIntoDb({
        'line': linesGeoJson,
        'date': user[i].date_created,
        'user_id': user[i].uid,
        'device_id': user[i].devid,
    });

const getPoint = col => {
    const p = col.source.line
    return p ? pgp.as.format('ST_GeomFromText($1)', p) : 'NULL';
};

这是使我的用户对象进入数据库的方法:

const cs = new pgp.helpers.ColumnSet([
    {
        name: 'id',
        mod: ':raw',
        init: generate_id
    },
    'device_id',
    'user_id',
    {
        name: 'created_date',
        prop: 'date'
    },
    {
        name: 'st_astext',
        mod: ':raw',
        init: getPoint
    }
], {
    table: 'scheduled_locations'
}); 

但不幸的是,它只是将async function saveLineIntoDb(user) { logger.debug(`saveIntoDatabase method started`); try { db.result(await pgp.helpers.insert(user, cs)) .then(data => { logger.debug(`saveIntoDatabase method ended`); }); } catch (error) { logger.error('saveIntoDatabase Error:', error); } } 之一存储在LINESTRING用户对象属性中。 line属性是一个列表,如上图所示。 我认为以这种方式pg-promise不能迭代对象内部的内部列表,而我必须单独插入。

1 个答案:

答案 0 :(得分:1)

您使用的await / async错误。更改为此:

async function saveLineIntoDb(user) {
    logger.debug('saveIntoDatabase method started');
    try {
        await db.result(pgp.helpers.insert(user, cs));
        logger.debug('saveIntoDatabase method ended'); 
    } catch (error) {
        logger.error('saveIntoDatabase Error:', error);
    }
}
  

但是不幸的是,它只是在line user object attribute内部存储了LINESTRING之一。 line属性是一个列表,如上图所示。我认为以这种方式pg-promise不能迭代对象内部的内部列表,而我必须单独插入。

因此您对列使用方法init,并正确设置其格式。