将数据从node.js存储到sql数据库

时间:2017-11-22 17:17:01

标签: sql-server node.js stored-procedures insert

我正在尝试将从客户端收到的结果数据存储到sql数据库中,但是我收到了这些错误

  
      
  1. TypeError:request.query(...)。则不是函数
  2.   
  3. TypeError:回调不是函数
  4.   

我是node.js和sql数据库的新手。我花了很多时间来计算这些,但不知道从哪里开始, 我试图删除。然后,它工作正常但仍然抛出第二个错误。有人可以就这个问题提出建议吗?

的node.js

//Receive from Angular Server 
const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.all("/*", function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
  next();
});

app.listen(1433, function () { console.log('Example app listening on port 1433!') })

var sql = require('mssql');
var config = {
  server: "",
  database: "",
  user: "",
  password: "",
  port: 
};


app.post('/ping', function (req, res) {
  res.send(res.body);
  var jsondata = JSON.stringify(req.body);
  var test = JSON.parse(jsondata);

  var values = [];
  values.push(test.GradeA, test.GradeB, test.GradeC)
  console.log(values);
  //values = [ '25', '36', '32' ] 

    var dbConn = new sql.Connection(config);
    dbConn.connect().then(function () {
      var transaction = new sql.Transaction(dbConn);

      transaction.begin().then(function () {
        var request = new sql.Request(transaction);

        request.query("INSERT INTO RMS (GradeA, GradeB, GradeC) values VALUES ? ", [values])
          .then(function () {
            transaction.commit().then(function (recordSet) {
              console.log('Rows Affected :' + request.rowsAffected);
              dbConn.close();

            }).catch(function (err) {

              console.log("Error in Transaction Commit" + err);
              dbConn.close();
            });
          }).catch(function (err) {

            console.log("Error in Transaction Begin" + err);
            dbConn.close();
          });

      }).catch(function (err) {

        console.log(err);
        dbConn.close();
      });
    }).catch(function (err) {

      console.log(err);
    });
  });

1 个答案:

答案 0 :(得分:0)

request.query("INSERT INTO RMS (GradeA, GradeB, GradeC) values VALUES ? ", [values])应该是给出错误的行。它假设第二个参数应该是函数。当传递第二个参数时,它不会返回一个promise,因此没有then方法。

mssql模块似乎不支持以您尝试的方式进行转义。它支持可用于将数据注入查询的输入方法。来自docs:

request
.input('input_parameter', sql.Int, value)
        .query('select * from mytable where id = @input_parameter'