Хранить список wkt внутри объекта с помощью pg-обещания в nodejs - PullRequest
0 голосов
/ 18 октября 2018

Я хочу сохранить этот объект в postgresql с помощью nodejs и библиотеки pg-обещания: enter image description here

Это мой метод:

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

, поэтому впорядок, который я создал ColumnSet:

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 атрибута объекта пользователя.Атрибут line - это список, который вы видите на изображении выше.Я думаю, что таким образом pg-обещание не может перебрать внутренний список внутри объекта, и мне приходится вставлять отдельно.

1 Ответ

0 голосов
/ 18 октября 2018

Вы неправильно используете 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);
    }
}

Но, к сожалению, он просто хранит один из LINESTRING в строке атрибута объекта пользователя.Атрибут line - это список, который вы видите на изображении выше.Я думаю, что таким образом pg-обещание не может перебрать внутренний список внутри объекта, и мне приходится вставлять отдельно.

Таким образом, вы используете метод init для столбца и правильно его форматируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...