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

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

我试图将从客户端接收到的结果数据存储到 SQL 数据库中,但是我收到这些错误

  1. TypeError: request.query(...).then is not a function
  2. TypeError: callback is not a function

我对 Node.js 和 sql 数据库很陌生。我花了相当多的时间来解决这些问题,但不知道从哪里开始,, 我尝试删除 .then,它工作正常,但仍然抛出第二个错误。有人可以就这个问题提出建议吗?

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

最佳答案

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

mssql 模块似乎不支持以您尝试的方式转义。它支持输入法,可用于将数据注入(inject)查询。来自文档:

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

关于sql-server - 将数据从node.js存储到sql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47440501/

相关文章:

c# - SQL SET 语句 C# 参数

sql - 查找存储过程的哪些参数可为空(可选)

sql - 如何从类型创建临时表?

sql-server - 如何从 SQL 表中删除不是组最大值的记录

node.js - NodeJS 将视频插入 Youtube 播放列表

node.js - 然后 promise /捕获

mysql - 根据 IF EXIST INSERT 数据

Entity Framework 迁移脚本中的 MySql 存储过程/循环

sql-server - Sqoop 无法从 Sql Server 导入数据

node.js - 如何创建一个固定长度的自动递增 id (sequelize)