我正在使用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
的控制台输出显示正确,但即使在等待之后也没有发生任何事情
感谢您的回复!
我使用的是节点6,所以现在不能测试'await'(出现在节点7中),但从这篇文章来看,您应该将await响应赋值给一个变量。如:
...
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;
}
}
您所拥有的功能应该可以正常工作,但我所做的(作为您的替代方案)只是直接使用promises并构建数据访问函数,通常如下所示:
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);
});
};
希望这有帮助!
我正在讨论这个问题,我的时间不多了,所以请大家帮忙:我想插入以下数据: 放入此表: ); 使用knex,这应该类似于smth: 由于这种语法对数组类型不起作用,我想知道如何做到这一点?有些人建议使用knex.raw(),但是我没有得到正确的语法,有什么帮助吗?
我有一个通过express连接的SQLite数据库,并且有使用express路由连接前端和后端的控制器。 表数据库 Knex插入行 反应前端 这里的问题是在前端,当我使用时,我得到的值为null,但当我用“text”替换stock.symbol,我得到的值为text。我在这里做错了什么?谢谢! 附注-这是常量存货
问题内容: 我使用Google Maps API制作了一个非常简单的页面,其中有几个字段,用户将在其中放置一些数据。看起来像- http://aiworker2.usask.ca/marker_field_db.html 我要做的是使用javascript / Ajax将数据存储到MySQL数据库中。我发现了几个使用Jquery的示例。我是这个javascript / Ajax / Jquery平
我有一个postgres数据库,包含一个名为“users”的表。该表有四个字段: id BIGSERIAL主键 显示名称文本不为空, 电子邮件文本不为空 电话号码文本 我想从dart代码中添加数据。我的尝试是这样的: 问题是我遇到了一个例外 (PostgreSQLSeverity.error 42601:在“display_name”处或附近出现语法错误)
问题内容: 我想使用PreparedStatement将行插入表中。该表有3列(int,String,String)。关键是int列是AUTO_INCREMENT,所以我想将该变量保留为空,然后让数据库完成该工作(这是一个id)。还没有找到如何做! 这是一个MySQL数据库。 问题答案: 这是相对简单的,只需从列列表中删除自动增量列即可: 准备该语句,设置两个参数,然后在非查询模式下执行。
但是得到 jspException(jspservletwrapper.java:568)org.apache.jasper.servlet.jspservletwrapper.java:455)org.apache.jasper.server.jspserver.servicejjspfile(jspservlet.java:390)org.apache.jasper.server.jspser