无法从Express.js和SQL Server创建的api获得任何响应?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (56)

我正在尝试学习如何使用Node和Express.js构建api。我已经找到了下一步:点击这里

并创建了一个非常相似的版本,但我的数据:

var express = require("express");
var bodyParser = require("body-parser");
var sql = require("mssql");
var app = express();

app.use(bodyParser.json());

app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization");
    next();
});

 var server = app.listen(process.env.PORT || 8080, function () {
    var port = server.address().port;
    console.log("App now running on port", port);
 });

 var dbConfig = {
     user:  "myUser",
     password: "myPass",
     server: "myServer",
     database: "MyDB"
 };

var  executeQuery = function(res, query){
     sql.connect(dbConfig, function (err) {
         if (err) {
                     console.log("Error al conectarse a la base :- " + err);
                     res.send(err);
                  }
                  else {
                         // create Request object
                         var request = new sql.Request();
                         // query to the database
                         request.query(query, function (err, res) {
                           if (err) {
                                      console.log("Error al correr query en la base :- " + err);
                                      res.send(err);
                                     }
                                     else {
                                       res.send(res);
                                            }
                               });
                       }
      });
}

//GET API
app.get("/api/ApiRequestData", function(req, res){
                var query = "select * from [RequestData]";
                executeQuery (res, query);
});

创建server.js doc后,执行npm install并运行node server.js,我使用下一个url在邮递员上打开:http://localhost:8080/api/ApiRequestData并收到错误消息:“无法获得任何响应”。在Node命令提示符下,我收到消息:

TypeError:res.send不是C:\ Users \ API \ server.js:43:44中的函数,位于C:\ Users \ API \ node_modules \ mssql \ lib \ main.js:1588:20,位于Request.userCallback( C:\ Users \ API \ node_modules \ mssql \ lib \ tedious.js:853:61)在Connection的Request.callback(C:\ Users \ API \ node_modules \ tedious \ lib \ request.js:33:27)。在Connection.dispatchEvent(C:\ Users \ API \ node_modules \ tedious \ lib \ connection.js:519:45)处的消息(C:\ Users \ API \ node_modules \ tedious \ lib \ connection.js:1179:27)at MessageIO。(C:\ Users \ API \ node_modules \ tedious \ lib \ connection.js:439:23)在DiscoveryablePacketStream的MessageIO.emit(events.js:208:7)的emitNone(events.js:106:13)处。(C:\ Users \用户API \ node_modules \乏味\ lib中\消息io.js:92:15)

有人知道为什么要显示这条消息?

希望您能够帮助我。

提问于
用户回答回答于

你是遮蔽res从线var executeQuery = function(res, query){...res从行request.query(query, function (err, res) {...。只需将最后一个重命名res为其他内容,您就不会收到此错误:

request.query(query, function (err, result) {
  if (err) {
    console.log("Error al correr query en la base :- " + err);
    res.send(err);
  }
  else {
    res.send(result);
  }
});

扫码关注云+社区

领取腾讯云代金券