【问题标题】:Nodejs API batch post with JSON data in body正文中带有 JSON 数据的 Nodejs API 批量发布
【发布时间】:2017-04-24 20:11:02
【问题描述】:

我正在构建一个带有 Nodejs API 的 Angular2 应用程序,用于使用 NPM 包“mssql”来操作 Microsoft SQL Server。 一切都很完美,但我无法弄清楚一件事。

我必须创建一种从 csv 文件发布一批用户的方法吗?有谁知道我该怎么做?

提前致谢!

编辑

添加了一些我已经拥有的代码(并且可以使用......)

组件:

`var array: Gebruiker[] = [];
array.push(model);
this.gebruikerService.insertGebruiker(array).subscribe(
...`

服务:

`insertGebruiker(data) {
    //Create headers for JSON data
    var headers = new Headers();
    headers.append('Content-Type', 'application/json');
    //create JSON from model
    var user = JSON.stringify(data);
    console.log("JSON DATA = " + data);
    return this.http.post('http://localhost:3000/api/gebruikers/post', user, {headers: headers});
  }`

API:

router.post('/gebruikers/post', (req, res) => {
sql.connect(dbconfig, function (err) {
    var request = new sql.Request();
    if (err) {
        console.log(err);
        return;
    }
    //Change variable to JSON
    var data = JSON.stringify(req.body);
    var json = JSON.parse(data);

    console.log(json)

    var count = Object.keys(json).length;

    var queryInsert = "INSERT INTO [Alg].[User] (FirstName, LastName, PrivateMail, UserName, Password, Auth, Enabled, Created, Manual, LastChanged, Staff) VALUES ";
    var queryVariables = "";
    var queryString = "";
    var counterForHowManyTimesTheQueryIsExecuted = 0;

    for (i = 0; i < count; i++) {
        //new variables for new user
        console.log(i);
        console.log(count);
        var FirstName = json[i].Firstname;
        var LastName = json[i].LastName;
        var PrivateMail = json[i].PrivateMail;
        var UserName = json[i].UserName;
        var Password = json[i].Password;
        var Staff = "1";
        queryVariables += "('" + FirstName + "', '" + LastName + "', '" + PrivateMail + "', '" + UserName + "', '" + Password + "', 'manual', 1, GetDate(), 1, GetDate(), " + Staff + ")";
        if ((i % 1000 == 0 && i != 0) || i == count - 1) {
            queryVariables += "; ";
            queryString = queryInsert + queryVariables;
            queryVariables = "";
            counterForHowManyTimesTheQueryIsExecuted++;
            console.log(queryString);
            request.query(queryString, function (err) {
                if (err) {
                    console.log(err);
                    return;
                }
                else {
                    res.end("POST request finished! ");
                }
            });
            request.query();
        }
        else {
            queryVariables += ", ";
        }
    }

    console.log(counterForHowManyTimesTheQueryIsExecuted);
});

});

【问题讨论】:

    标签: sql-server node.js api angular npm


    【解决方案1】:

    使用csv-parse module。这会将 CSV 文本输入转换为数组或对象

    以下可以是算法:

    • 上传文件
    • 使用fs模块读取文件
    • 传递给csv-parse 模块。如前所述,它将返回数组数组
    • 迭代并插入数据库

      var csvParser = require('csv-parse');
      fs.readFile(filePath, {
       encoding: 'utf-8'
       }, function(err, csvData) {
              if (err) {
                 console.log(err);
               }
           csvParser(csvData, {
              delimiter: ','
             }, function(err, data) {
                    if (err) {
                          console.log(err);
                     } else {
                       // Insert into database here
                          console.log(data);
                     }
                  });
             });
      

    【讨论】:

    • 好的,这很有用!但我需要将此数据发送到我的 Nodejs API 中的帖子。我可以将该数组解析为 json 格式,然后将其发送到我的帖子正文中(在我的服务中)吗?
    • 在客户端解析 Csv 是不明智的。为了一个快速的方法。 github.com/MounirMesselmeni/html-fileapi/blob/master/js/…
    • 在客户端解析数据时可能会遗漏一些边缘情况。 node.js 已经有很好的库(例如csv-parse)来完成这项工作。
    • 但是如何将 csv 数据发送到我的 API?它必须能够一次发送至少 10.000 个用户...
    • 所以,我建议你上传csv文件并在服务器端解析。
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2016-09-12
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2013-12-06
    相关资源
    最近更新 更多