Javascript Node.js数据库查询
编辑 我的问题有点变化,所以我正在更新代码并修改我的问题。除了我的浏览器中没有返回JSON外,其他一切似乎都正常工作 这是我目前的代码:Javascript Node.js数据库查询,javascript,node.js,Javascript,Node.js,编辑 我的问题有点变化,所以我正在更新代码并修改我的问题。除了我的浏览器中没有返回JSON外,其他一切似乎都正常工作 这是我目前的代码: 'use strict'; var util = require('util'); var http = require('http'); var sql = require("mssql"); var express = require('express') var port = process.env.PORT || 1337; var membersh
'use strict';
var util = require('util');
var http = require('http');
var sql = require("mssql");
var express = require('express')
var port = process.env.PORT || 1337;
var membershipNumber;
var results;
var queryString;
var app = express();
function getParams() {
app.get('/:number', function (req, res) {
console.log("\nPARAMS:");
console.log(req.params.number);
membershipNumber = req.params.number;
queryString = util.format('SELECT major_key, status, paid_thru FROM name WHERE major_key = \'%s\' and member_record = 1', membershipNumber);
console.log("\nQUERY:");
console.log(queryString);
res.setHeader('Content-Type', 'application/json');
// res.end(queryDatabase(queryString));
res.send(queryDatabase(queryString));
});
app.listen(port);
}
function queryDatabase(query) {
var config = {
server: 'testserver',
database: 'test_db',
user: 'sa',
password: 'password',
port: 1433
};
var connection = new sql.Connection(config);
connection.connect().then(function () {
var req = new sql.Request(connection);
req.query(query).then(function (recordset) {
results = recordset;
console.log("\nRESULTS:");
console.log(results);
connection.close();
//Convert results to JSON string
var jsonString = JSON.stringify(results);
console.log("\njsonString:");
console.log(jsonString);
return jsonString;
})
.catch(function (err) {
console.log(err);
connection.close();
});
})
.catch(function (err) {
console.log(err);
});
}
getParams();
下面是my console.log语句在控制台中打印的内容“
您有两个
app.listen()
调用:一个在appFunction()
中,另一个在getParams()
中。您应该只调用app.listen()
一次,并删除appFunction()
中的一个,因为getParams()
似乎是您在初始化时调用的函数
如果您确实需要这样构造代码,请尝试以下方法:
function queryDatabase(query) {
var config = {
server: 'dbserver',
database: 'test_db',
user: 'sa',
password: 'password',
port: 1433
};
var connection = new sql.Connection(config);
connection.connect().then(function() {
var req = new sql.Request(connection);
req.query(query).then(function(recordset) {
results = recordset;
console.log("\nRESULTS:");
console.log(results);
connection.close();
//Convert results to JSON string
jsonString = JSON.stringify(results);
console.log("\nJSON:");
console.log(jsonString);
appFunction(jsonString);
})
.catch(function(err) {
console.log(err);
connection.close();
});
})
.catch(function(err) {
console.log(err);
});
}
app.get('/:number', function(req, res) {
console.log("\nPARAMS:");
console.log(req.params.number);
membershipNumber = req.params.number;
queryString = util.format('SELECT major_key, status, paid_thru FROM name WHERE major_key = \'%s\' and member_record = 1', membershipNumber);
console.log("\nQUERY:");
console.log(queryString);
res.end(queryDatabase(queryString));
});
app.get('/', function(req, res) {
res.setHeader('Content-Type', 'application/json');
res.send(jsonString);
});
app.listen(port);
请注意,一次只能处理一个请求
我强烈建议在进行REST调用时,将queryDatabase()
函数的输出返回给用户;在这种情况下,您的“/:number”路由将返回您希望接收的JSON字符串。在与此REST完全交互的应用程序中,您将看到以下内容:
GET http://<your-ip>:<your-port>/3
RESPONSE: { some JSON }
获取http://:/3
响应:{some JSON}
此时,您将不需要“/”路由。我理解这一点,并且在我的问题中提到了这一点。删除appFunction()中的一个路由的问题是,当我取出它时,我没有得到JSON字符串。对此感到抱歉。我做了一次编辑,提出了获取JSON字符串的方法(请参阅文章底部)tl;dr:在“/:number”路由中返回JSON字符串,而不是使用另一个路由来返回它。我如何使用“/:number”路由实现您的建议?使用
queryDatabase
函数return jsonString;
。这将把JSON发送回用户,作为调用/:number路线。
GET http://<your-ip>:<your-port>/3
RESPONSE: { some JSON }