Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Postgres/Knex在JSONB列中存储对象_Javascript_Node.js_Postgresql_Postman_Knex.js - Fatal编程技术网

Javascript 使用Postgres/Knex在JSONB列中存储对象

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

我在后端创建了一个graphs表来存储与图形相关的数据。以下是Knex迁移文件中的模式:

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主体,因此需要将其转换回字符串