sql-server - Nodejs API 批量发布,正文中包含 JSON 数据

标签 sql-server node.js api angular npm

我正在构建一个带有 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);
});

});

最佳答案

使用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);
                   }
                });
           });
    

关于sql-server - Nodejs API 批量发布,正文中包含 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540117/

相关文章:

node.js - Azure 文件共享 API - x-ms-version 的 header 格式无效

javascript - Recurly js v3 未捕获类型错误 : Cannot read property 'config' of undefined

c - 高级内存编辑/函数调用

c# - 在应用程序中管理时区和位置感知时间?

sql - 加入使用日期字段的最佳方式

javascript - 基于 HTML 下拉列表 Node JS 更改 MySQL 查询

api - 是否可以使用传入的 Webhook 将文件发布到 Slack?

sql - OPENROWSET - 文件名中的空格问题

sql-server - SQL Server 全文不考虑前导零

database - Redis 存储(或任何数据库?)锁定机制 (NodeJS)