通过knex

时间:2017-09-16 14:12:27

标签: javascript postgresql knex.js

我正在尝试使用faker通过knex将数据插入到postgresql数据库中。

见下面一个最低限度的例子:

//Loading from an external file
var knex = require('knex')({
    client: 'postgresql',
    connection: {
        database: 'knexdb',
        user:     'root',
        password: 'root'
      },
    debug: false,
})
// using faker
const faker = require('faker')

async function main() {

    //test connection
    await knex.raw('select 1+1 as result').then(function () {
        console.log("valid db connection")
        // there is a valid connection in the pool
    });

    //delete data
    await knex('posts').del().then(function () {
        const res = knex('posts')
        if (res) {
            console.log("Table content deleted")
        } else {
            console.log(res)
        }
    })

    const dataAmount = 3
    console.log("lets insert " + dataAmount + " rows of data")
    for (var index = 0; index < dataAmount; index++) {
        try {
            await knex('posts').insert({
                title: faker.random.word,
                description: faker.lorem.paragraph,
                deleted: faker.random.boolean,
                createdAt: faker.date.recent,
                updatedAt: faker.date.recent
            })
        } catch (e) {
            console.log(e)
        }
    }

    // select all
    res = await knex('posts')
    console.log('All: ', res)

}

main() //.then().catch(err => console.error(err))

我收到以下错误SELECT * with no tables specified is not valid。请参阅下面的完整输出:

  

有效的数据库连接   表内容已删除   插入3行数据   {error:没有指定表的SELECT *无效       在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11)       在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19)       在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22)       在emitOne(events.js:115:13)       在Socket.emit(events.js:210:7)       在addChunk(_stream_readable.js:266:12)       在readableAddChunk(_stream_readable.js:253:11)       在Socket.Readable.push(_stream_readable.js:211:10)       在TCP.onread(net.js:585:20)     名称:&#39;错误&#39;,     长度:117,     严重程度:&#39; ERROR&#39;,     代码:&#39; 42601&#39;,     细节:未定义,     提示:未定义,     职位:&#39; 99&#39;,     internalPosition:undefined,     internalQuery:undefined,     其中:undefined,     schema:undefined,     表:undefined,     专栏:未定义,     dataType:undefined,     约束:未定义,     file:&#39; parse_target.c&#39;,     line:&#39; 1211&#39;,     例程:&#39; ExpandAllTables&#39; }   {error:没有指定表的SELECT *无效       在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11)       在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19)       在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22)       在emitOne(events.js:115:13)       在Socket.emit(events.js:210:7)       在addChunk(_stream_readable.js:266:12)       在readableAddChunk(_stream_readable.js:253:11)       在Socket.Readable.push(_stream_readable.js:211:10)       在TCP.onread(net.js:585:20)     名称:&#39;错误&#39;,     长度:117,     严重程度:&#39; ERROR&#39;,     代码:&#39; 42601&#39;,     细节:未定义,     提示:未定义,     职位:&#39; 99&#39;,     internalPosition:undefined,     internalQuery:undefined,     其中:undefined,     schema:undefined,     表:undefined,     专栏:未定义,     dataType:undefined,     约束:未定义,     file:&#39; parse_target.c&#39;,     line:&#39; 1211&#39;,     例程:&#39; ExpandAllTables&#39; }   {error:没有指定表的SELECT *无效       在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11)       在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19)       在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22)       在emitOne(events.js:115:13)       在Socket.emit(events.js:210:7)       在addChunk(_stream_readable.js:266:12)       在readableAddChunk(_stream_readable.js:253:11)       在Socket.Readable.push(_stream_readable.js:211:10)       在TCP.onread(net.js:585:20)     名称:&#39;错误&#39;,     长度:117,     严重程度:&#39; ERROR&#39;,     代码:&#39; 42601&#39;,     细节:未定义,     提示:未定义,     职位:&#39; 99&#39;,     internalPosition:undefined,     internalQuery:undefined,     其中:undefined,     schema:undefined,     表:undefined,     专栏:未定义,     dataType:undefined,     约束:未定义,     file:&#39; parse_target.c&#39;,     line:&#39; 1211&#39;,     例程:&#39; ExpandAllTables&#39; }   全部:[]   ^ C   C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ src&gt; node t3-faker.js   有效的数据库连接   表内容已删除   让我们插入3行数据   {error:没有指定表的SELECT *无效       在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11)       在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19)       在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22)       在emitOne(events.js:115:13)       在Socket.emit(events.js:210:7)       在addChunk(_stream_readable.js:266:12)       在readableAddChunk(_stream_readable.js:253:11)       在Socket.Readable.push(_stream_readable.js:211:10)       在TCP.onread(net.js:585:20)     名称:&#39;错误&#39;,     长度:117,     严重程度:&#39; ERROR&#39;,     代码:&#39; 42601&#39;,     细节:未定义,     提示:未定义,     职位:&#39; 99&#39;,     internalPosition:undefined,     internalQuery:undefined,     其中:undefined,     schema:undefined,     表:undefined,     专栏:未定义,     dataType:undefined,     约束:未定义,     file:&#39; parse_target.c&#39;,     line:&#39; 1211&#39;,     例程:&#39; ExpandAllTables&#39; }   {error:没有指定表的SELECT *无效       在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11)       在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19)       在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22)       在emitOne(events.js:115:13)       在Socket.emit(events.js:210:7)       在addChunk(_stream_readable.js:266:12)       在readableAddChunk(_stream_readable.js:253:11)       在Socket.Readable.push(_stream_readable.js:211:10)       在TCP.onread(net.js:585:20)     名称:&#39;错误&#39;,     长度:117,     严重程度:&#39; ERROR&#39;,     代码:&#39; 42601&#39;,     细节:未定义,     提示:未定义,     职位:&#39; 99&#39;,     internalPosition:undefined,     internalQuery:undefined,     其中:undefined,     schema:undefined,     表:undefined,     专栏:未定义,     dataType:undefined,     约束:未定义,     file:&#39; parse_target.c&#39;,     line:&#39; 1211&#39;,     例程:&#39; ExpandAllTables&#39; }   {error:没有指定表的SELECT *无效       在Connection.parseE(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:546:11)       在Connection.parseMessage(C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:371:19)       在Socket。 (C:\ Users \ user \ Desktop \ Coding Projects \ learning_knex \ node_modules \ pg \ lib \ connection.js:114:22)       在emitOne(events.js:115:13)       在Socket.emit(events.js:210:7)       在addChunk(_stream_readable.js:266:12)       在readableAddChunk(_stream_readable.js:253:11)       在Socket.Readable.push(_stream_readable.js:211:10)       在TCP.onread(net.js:585:20)     名称:&#39;错误&#39;,     长度:117,     严重程度:&#39; ERROR&#39;,     代码:&#39; 42601&#39;,     细节:未定义,     提示:未定义,     职位:&#39; 99&#39;,     internalPosition:undefined,     internalQuery:undefined,     其中:undefined,     schema:undefined,     表:undefined,     专栏:未定义,     dataType:undefined,     约束:未定义,     file:&#39; parse_target.c&#39;,     line:&#39; 1211&#39;,     例程:&#39; ExpandAllTables&#39; }   全部:[]

有什么建议我做错了吗?

2 个答案:

答案 0 :(得分:2)

你正在混合promises和async / await,这使得代码更难以阅读,你在那里也犯了一些错误,也许这就是你想做的事情:

//Loading from an external file
var knex = require('knex')({
    client: 'postgresql',
    connection: {
        database: 'knexdb',
        user:     'root',
        password: 'root'
    },
    debug: false,
})
// using faker
const faker = require('faker')

async function main() {

    //test connection
    await knex.raw('select 1+1 as result');
    console.log("valid db connection");

    //delete data
    await knex('posts').del();
    const res = await knex('posts'); // FIXED: this was missing await
    if (res.length === 0) {          // FIXED: also empty array is truthy
        console.log("Table content deleted");
    } else {
        console.log(res);
    }

    const dataAmount = 3
    console.log(`lets insert ${dataAmount} rows of data`);
    for (let index = 0; index < dataAmount; index++) {
        try {
            // FIXED: faker calls were missing () from the end
            await knex('posts').insert({
                title: faker.random.word(),
                description: faker.lorem.paragraph(),
                deleted: faker.random.boolean(),
                createdAt: faker.date.recent(),
                updatedAt: faker.date.recent()
            });
        } catch (e) {
            console.log(e);
        }
    }

    // select all
    let finalRes = await knex('posts');
    console.log('All: ', finelRes);
}

main().then().catch(err => console.error(err));

我认为没有表错误的SELECT *是以某种方式引起的,因为你试图将函数写入数据库而不是值。

答案 1 :(得分:1)

您传递函数,而不是他们的返回值。

.kind == "audio"

以下代码段应为您提供所需的行为:

await knex('posts').insert({
  title: faker.random.word,
  description: faker.lorem.paragraph,
  deleted: faker.random.boolean,
  createdAt: faker.date.recent,
  updatedAt: faker.date.recent
})