代码之家  ›  专栏  ›  技术社区  ›  Carol.Kar

使用knex插入数据库

  •  0
  • Carol.Kar  · 技术社区  · 8 年前

    knex 0.13.0 我正在尝试使用以下函数插入mysql数据库:

    async function create(title, description) {
        //trim spaces
        console.log("title: " + title)
        console.log("description: " + description)
        title = title.trim()
        description = description.trim()
        createdAt = _.now()
        deleted = false
        console.log("Create Post: " + title + " " + description + " " + createdAt + " " + deleted)
    
        if (title.length < 1 || title.length > 255) throw new Error('Title is not valid.')
        if (description.length < 1) throw new Error('Description is not valid.')
    
        try {
            await knex('posts').insert({
                title,
                description,
                createdAt,
                deleted
            })
            console.log("added to db")
            return true;
        } catch (e) {
            return "An error occured: " + e;
        }
    }
    

    Create Post: Title Description 1505062847788 false

    • 我想这是函数的异步部分,但在此期间还能做什么呢?
    • 使用knex时,有没有标准的方法来创建条目?

    感谢您的回复!

    1 回复  |  直到 8 年前
        1
  •  1
  •   GaryL    8 年前

    我使用的是节点6,所以目前无法测试“wait”(来自节点7),但从 this post 看起来应该将等待响应分配给变量。例如:

    ...        
    var awResponse; // new variable
    try {
        awResponse = await knex('posts').insert({
    ...
    

    具体内容:

    async function create(title, description) {
        //trim spaces
        console.log("title: " + title)
        console.log("description: " + description)
        title = title.trim()
        description = description.trim()
        createdAt = _.now()
        deleted = false
        console.log("Create Post: " + title + " " + description + " " + createdAt + " " + deleted)
    
        if (title.length < 1 || title.length > 255) throw new Error('Title is not valid.')
        if (description.length < 1) throw new Error('Description is not valid.')
    
        var awResponse; // new variable
        try {
            awResponse = await knex('posts').insert({
                title,
                description,
                createdAt,
                deleted
            })
            console.log("added to db")
            return true;
        } catch (e) {
            return "An error occured: " + e;
        }
    }
    

    function create(title, description) {
        return Promise.resolve().then(function () {
            // This first section is for preping the record for insert.
            //
            //trim spaces
            console.log("title: " + title)
            console.log("description: " + description)
            title = title.trim()
            description = description.trim()
            // createdAt = _.now()  // I have a error that "_" is not valid
            createdAt = (new Date()).toISOString();
            deleted = false
            console.log("Create Post: " + title + " " + description + " " + createdAt + " " + deleted)
    
            if (title.length < 1 || title.length > 255) throw new Error('Title is not valid.')
            if (description.length < 1) throw new Error('Description is not valid.')
            return { "title": title,
                     "description": description,
                     "createdAt": createdAt,
                    "deleted": deleted };
        })
        .then(function (recordToInsert) {
            // This second section is for the insert.
            //
            console.log("Part #2");
            return knex('posts').insert(recordToInsert)
            .on('query-error', function(ex, obj) {
                // console.log("KNEX query-error ex:", ex);
                // console.log("KNEX query-error obj:", obj);
                // Below logs db errors into my custom encapsulation of winston logging.
                //       ... and the .catch further down will still be executed.
                log.logMsg('error', "DBA.INS88", "KNEX create.on.query-error", {"fnc": "create", "obj":obj, "ex":ex} );
            })
        })
        .then(function (insertResult) {
            // This third section is for post-processing the result (if needed).
            //
            console.log("Part #3 added to db :", insertResult);
            return insertResult; // returns id value from insert;
        })
        .catch(function (e) {
            // I omit this .catch to let the caller know about and handle the exceptions
            console.log( "An error occured: " + e);
        });
    };
    

    希望这有帮助!