0

我正在尝试使用 Node.js 将 JSON 文件导入 PostgresSQL。我正在使用 mass.js 来做到这一点。

下面是我的 JS 代码:

var parsedJSON = require('./employeesTest.json');
var express = require("express");
var app = express();
var http = require('http');
var massive = require("massive");
var connectionString = "postgres://:@localhost/tl";

var db = massive.connectSync({ connectionString: connectionString });

var insert = function(err, res) {
for (i = 0; i < parsedJSON.data.length; i++) {
    db.saveDoc("employees", parsedJSON.data[i]);
    if (err) {
        console.log('error: ', err);
        process.exit(1);
    };
  };
};

所以。我正在尝试遍历 JSON,然后插入。我将它与以下 JSON 一起使用:

{
"data": [{
        "id": 89304,
        "userName": "keith1@keith.keith"
    },
    {
        "id": 87431,
        "userName": null
    },
    {
        "id": 84863,
        "userName": null
    },
    {
        "id": 72371,
        "userName": "toad@toad.com"
    }
   ]
  }

我有以下 PostgresSQL 结构:

  • 数据库: tl
  • 表:员工
  • :id(类型:Int,Sequence)
  • :正文(类型:jsonb)

我在 Github 上看到过类似的工作: https ://github.com/craigkerstiens/json_node_example

但是,我的循环不会出错,但不会存储任何数据。

我在做什么从根本上是错误的?

或者,是否有使用 Node.js 将现有 JSON 文件存储到 Postgres 的“最佳方式”?我可以找到很多关于 Node.js + Postgres 的信息,但其中大部分是用于 RESTful 目的。

4

2 回答 2

0

saveDoc是一个异步函数,因此您编写循环的方式是将数据发送出去,然后立即继续检查未设置的err变量。您需要传递saveDoc一个回调,它将接收任何错误和结果,并在回调中进行错误检查。由于您正在迭代集合并对每个成员执行异步工作,因此请查看asyncmap提供的内容。

于 2017-03-02T16:15:36.637 回答
0

您没有等待 saveDoc 功能

db.saveDoc("employees", parsedJSON.data[i]);

根据文档:https ://github.com/dmfay/massive-js

我们可以通过调用 saveDoc 来动态创建一个文档表:

db.saveDoc('test_attributes', { productVersion: '1.0.5',
testEnvironment: 'production', web: true, accessibilityStandards: ['wcag2a', 'wcag2aa'] }).then(attributes => {... });

所以也许:

db.saveDoc("employees", parsedJSON.data[i]).then((res)=>{
//do something here
});
于 2018-07-20T13:48:02.280 回答