我试图将从客户端接收到的结果数据存储到 SQL 数据库中,但是我收到这些错误
- TypeError: request.query(...).then is not a function
- 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/