2017-11-22 3 views
1

내가 저장 결과 데이터에 노력하고 있어요 그러나 나는 이러한 오류가데이터를 저장

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

내가 Node.js를 및 SQL에 아주 새로운 오전 얻고, SQL 데이터베이스에 클라이언트 측에서 수신 데이터 베이스. 나는 꽤 많은 시간을 보냈지 만 어디에 시작해야할지 모르겠다. 나는 제거하려고 시도했다. 그럼, 잘 동작하지만 여전히 2 번째 오류를 던진다. 누구든지이 문제에 대한 조언을 구할 수 있습니까?

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

답변

0

request.query("INSERT INTO RMS (GradeA, GradeB, GradeC) values VALUES ? ", [values]) 오류를주는 선해야 Node.js를. 두 번째 매개 변수가 함수 여야한다고 가정합니다. 두 번째 매개 변수가 전달되면 약속을 반환하지 않으므로 then 메서드가 없습니다.

mssql 모듈은 사용자가 의도 한 방식대로 이스케이프를 지원하지 않는 것 같습니다. 쿼리에 데이터를 주입하는 데 사용할 수있는 입력 방법을 지원합니다. 문서에서 :

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

나는 request.input로 ('input_parameter', sql.Int, 값) .query (오류를 발생시키는 라인 교체, 'INSERT INTO 테스트 (GradeA, GradeB, 그 라데츠) 가치를?' [values]) 여전히 나에게 같은 오류를 주거나, 다른 방법으로 내가하려는 방법보다 낫지 않습니까? –

+0

여전히 두 번째 인자'[values]'를 전달 중입니다. query ('gradea', '24') 입력 ('gradeb', '43') 입력 ('gradec', '21') 질의 ('INSERT INTO RMS (PlanW, ActualW, OrW)) VALUES (@gradea, @gradeb, @gradec))' –

+0

각 값을 지정해야합니까? 배열 매개 변수를 전달할 수 없습니까? –