Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js数据库查询_Javascript_Node.js - Fatal编程技术网

Javascript Node.js数据库查询

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

编辑 我的问题有点变化,所以我正在更新代码并修改我的问题。除了我的浏览器中没有返回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 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 }