0

我想对我的收藏执行 crud 操作。为了自动执行此操作,我编写了一个用于在我的集合中插入文档的脚本。

该脚本基本上应该从 json 文件中读取数据并将其插入到我的 db-collection 中。

'use strict';
const fs = require('fs');
const path = require('path');
const { spawn }= require('child_process');

(function () {
    const username = process.env.DB_USERNAME,
        password = process.env.DB_PASSWORD,
        args = process.argv.slice(3),
        log = console.log,
        mongoServer = "mongodb+srv://***server-name***/";

    let database,
        documents,
        collection;


    if (args.length === 2) {
        database = args[0];
        collection = args[1];

        const raw = fs.readFileSync(path.join(__dirname, 'documents.json'));
        documents = JSON.parse(raw);

        log(documents)
        const writeAction = spawn('mongo', [`\"${mongoServer}${database}\" -u ${username} -p ${password} --eval \"db.${collection}.insert(${documents})\"  `], {shell: true});
        writeAction.stdout.on('data', data => log((`stout: ${data}`));
        writeAction.stderr.on('data', data => log((`StdErr: ${data}`)));
        writeAction.on('close', (code) => log(`Child process exited with code: ${code}.`));
    } else {
        log('A database and a collection has to be specified!\n In Order:\n 1. Database\n 2. Collection');
        process.exit(1);
    }
})();

如果我读取 json 文件,控制台会记录以下内容:

[ { id: '3685b542-61d5-45da-9580-162dca725966',
    mission:
     'The American Red Cross prevents and alleviates human suffering in the face of emergencies by mobilizing the power of volunteers and the generosity of donors.',
    street1: '2025 E Street, NW',
    profile_url:
     'https://www.pledgeling.com/organizations/42/american-red-cross' } ]

所以 json 对我来说看起来不错,但如果我执行脚本,它会抛出错误:

stout: 2019-11-08T18:08:33.901+0100 E  QUERY    [js] uncaught exception: SyntaxError: missing ] after element list :
@(shell eval):1:23
2019-11-08T18:08:33.901+0100 E  -        [main] exiting with code -4

你们中有人知道如何克服这个错误吗?

4

2 回答 2

0

它显然没有看到右括号。因此,首先尝试丢掉括号并进行测试。另外,不要忘记强制“utf8”编码。

const raw = fs.readFileSync(path.join(__dirname, 'documents.json'), 'utf8');
documents = JSON.parse(raw);
于 2019-11-08T17:16:15.330 回答
0

线...

writeAction.stdout.on('data', data => log((`stout: ${data}`)); 

...缺少括号。

于 2019-11-08T17:31:58.027 回答