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

Posted

技术标签:

【中文标题】无法从使用 Express.js 和 SQL Server 创建的 api 获得任何响应【英文标题】:Cannot get any response from api created with Express.js and SQL Server 【发布时间】:2018-10-29 21:59:29 【问题描述】:

我正在尝试学习如何使用 Node 和 Express.js 构建 api。我一步一步找到了下一步:click here

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

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 文档后,使用npm install 执行并使用node server.js 运行,我使用下一个 url 在邮递员上打开:http://localhost:8080/api/ApiRequestData 并收到错误消息:“无法获得任何响应”。在节点命令提示符下,我收到消息:

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) 在 Request.callback (C:\Users\API\node_modules\tedious\lib\request.js:33:27) 在 Connection.message (C:\Users\API\node_modules\tedious\lib\connection.js:1179:27) 在 Connection.dispatchEvent (C:\Users\API\node_modules\tedious\lib\connection.js:519:45) 在 MessageIO。 (C:\Users\API\node_modules\tedious\lib\connection.js:439:23) 在 emitNone (events.js:106:13) 在 MessageIO.emit (events.js:208:7) 在 ReadablePacketStream。 (C:\Users\API\node_modules\tedious\lib\message-io.js:92:15)

有人知道为什么显示此消息吗?

希望你能帮助我。

【问题讨论】:

【参考方案1】:

您正在使用来自request.query(query, function (err, res) ... 行的res 跟踪var executeQuery = function(res, query)... 行中的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);
  
);

【讨论】:

【参考方案2】:

您可以使用下面的查询来获取具有硬编码查询的记录,例如。 我在我的应用程序中使用了相同的方法。

sql.connect(config).then(() => 
    return sql.query`select * from [dbo].[Customer]`
).then(result => 
    console.log(result)
).catch(err => 
    console.log(err);
)

使用存储过程获取结果。

sql.connect(config).then(pool => 
    return pool.request().input('Customerid', sql.Int, 2).execute("GetCustomerbyId")
).then(result => 
    console.log(result)
).catch(err => 
    console.log(err);
)

【讨论】:

以上是关于无法从使用 Express.js 和 SQL Server 创建的 api 获得任何响应的主要内容,如果未能解决你的问题,请参考以下文章

无法使用邮递员从 express.js 服务器获得响应

无法将多部分表单数据从 React 正确发送到 Express Js

从 Nginx 到 express.js 上的 socket.io 的反向代理上的“无法获取”

无法将 Express.js 服务器连接到 Angular 前端

CRUD op Express.js Node.js Mysql 无法使用 MVC 插入

Express JS 和 CoinPayments:无法获取 IPN 通知请求的请求正文