2017-11-22 7 views
1

私は店結果データにしようとしていますが、しかし私は、これらのエラーはストアデータ

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

私はNode.jsのとSQLに非常に新しいです取得しています、SQLデータベースにクライアント側から受け取りましたデータベース。私はかなりの時間これらを把握するためにどこを起動するかわからない、 私は削除しようとしました。それはうまく動作しますが、まだ2番目のエラーをスローします。誰もこの問題についてアドバイスをしていただけますか?

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

答えて

0

request.query("INSERT INTO RMS (GradeA, GradeB, GradeC) values VALUES ? ", [values])はエラーを与える行でなければなりません。 2番目のパラメータは関数である必要があると仮定します。そして、2番目のパラメータが渡されると、それは約束を返さないので、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、GradeC)VALUESを?' [値])、やはり私に同じエラーが出る、または私がやろうとしているやり方よりも良い方法がありますか? –

+0

あなたはまだ第2引数 '[values]'を渡しています。この 'request.input(' gradea '、' 24 ')入力(' gradeb '、' 43 ')入力(' gradec '、' 21 ')。 )VALUES(@gradea、@gradeb、@gradec)) ' –

+0

それぞれの値を指定する必要がありますか?私は配列パラメータを渡すことはできません –

関連する問題