Javascript 无法从使用Express.js和SQL Server创建的api获取任何响应
我正在尝试学习如何使用Node和Express.js构建api。我一步一步地找到了下一步: 创建了一个非常相似的版本,但使用了我的数据:Javascript 无法从使用Express.js和SQL Server创建的api获取任何响应,javascript,node.js,sql-server,express,Javascript,Node.js,Sql Server,Express,我正在尝试学习如何使用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,
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安装执行并使用node server.js运行,我在postman上打开了下一个url:http://localhost:8080/api/ApiRequestData
并收到一条错误消息:“无法获得任何响应”。在节点命令提示符下,我收到以下消息:
TypeError:res.send不是一个函数
在C:\Users\API\server.js:43:44
在C:\Users\API\node\u modules\mssql\lib\main.js:1588:20
at Request.userCallback(C:\Users\API\node\u modules\mssql\lib\tedious.js:853:61)
at Request.callback(C:\Users\API\node\u modules\tedous\lib\Request.js:33:27)
在Connection.message(C:\Users\API\node\u modules\tedous\lib\Connection.js:1179:27)
在Connection.dispatchEvent(C:\Users\API\node\u modules\tedious\lib\Connection.js:519:45)
在MessageIO。(C:\Users\API\node\u modules\tedous\lib\connection.js:439:23)
在emitNone(events.js:106:13)
在MessageIO.emit(events.js:208:7)
在ReadablePacketStream。(C:\Users\API\node\u modules\tedious\lib\message io.js:92:15)
有人知道为什么会显示此消息
希望您能帮助我。您正在跟踪res
行var executeQuery=function(res,query){…
和res
行请求。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);
}
});
您可以使用下面的查询获取带有硬编码查询的记录,如。
我在申请时也用了同样的方法
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);
})