Javascript 使用Postgres/Knex在JSONB列中存储对象
我在后端创建了一个graphs表来存储与图形相关的数据。以下是Knex迁移文件中的模式:Javascript 使用Postgres/Knex在JSONB列中存储对象,javascript,node.js,postgresql,postman,knex.js,Javascript,Node.js,Postgresql,Postman,Knex.js,我在后端创建了一个graphs表来存储与图形相关的数据。以下是Knex迁移文件中的模式: exports.up = function(knex) { return ( knex.schema .createTable('users', tbl => { tbl.increments(); tbl.string('username', 255).notNullable(); tbl.str
exports.up = function(knex) {
return (
knex.schema
.createTable('users', tbl => {
tbl.increments();
tbl.string('username', 255).notNullable();
tbl.string('password', 255).notNullable();
tbl.string('name', 255).notNullable();
tbl.string('email', 255).unique().notNullable();
})
.createTable('graphs', tbl => {
tbl.increments();
tbl.string('graph_name', 255).notNullable();
tbl.jsonb('graph_info').notNullable();
tbl
.integer('user_id')
.unsigned()
.notNullable()
.references('id')
.inTable('users')
.onDelete('CASCADE')
.onUpdate('CASCADE');
})
)
};
下面是我试图存储在数据库jsonb列中的数据类型示例:
{
labels: ['Axis1', 'Axis2', 'Axis3'],
datasets: [
{
label: 'Dataset1',
borderDash: [0, 0],
backgroundColor: '#fff',
data: [25, 14, 22],
},
],
title: 'Graph1',
}
下面是我试图通过邮递员发送的请求:
{
"graph_name": "test10",
"graph_info": "{
labels: ['Axis1', 'Axis2', 'Axis3'],
datasets: [
{
label: 'Dataset1',
borderDash: [0, 0],
backgroundColor: '#fff',
data: [25, 14, 22],
},
],
title: 'Graph1'
}",
"user_id": "1"
}
我收到以下错误:SyntaxError:意外令牌
在位置44的JSON中
。当我试图弄清楚发生了什么时,我偶然发现了这篇文章:
我将我的内容类型标题设置为application/json
,邮递员没有给我发送错误请求的信号。我不确定是什么问题
也有可能我的想法是错误的。当我查看Postgres文档时,我觉得存储我试图存储的对象类型的最佳方法是使用jsonb列。但如果不是这样,我愿意接受建议。任何帮助都将不胜感激。从结果中的
graph\u info
来看,它不是一个有效的JSON,而是一个包含js对象的字符串
将数据保存到JSONB列时,需要对对象应用JSON.stringify
方法
例如:
{
"graph_name": "test10",
"graph_info": JSON.stringify({
labels: ['Axis1', 'Axis2', 'Axis3'],
datasets: [
{
label: 'Dataset1',
borderDash: [0, 0],
backgroundColor: '#fff',
data: [25, 14, 22],
},
],
title: 'Graph1'
}),
"user_id": "1"
}
谢谢你回复我。我正在与其他开发人员一起构建前端。有没有一种方法可以用邮递员来测试?我知道我可以让前端开发者在发送图形数据之前将其字符串化。但我也希望在我这方面进行故障排除。只需检查服务器上的内容,通常默认情况下服务器都是解析json主体,因此需要将其转换回字符串