Node.js REST获取记录集响应

Node.js REST获取记录集响应,node.js,rest,Node.js,Rest,我开发了一个纯node.js REST应用服务器,它连接到MSSQL数据库,并使用端点请求员工记录 当我请求所有员工记录或使用REST GET请求请求一个员工记录时,我收到了重复记录。响应同时具有记录集和记录集部分。这是否正确?如果正确,如何防止重复记录 你的帮助将不胜感激 db.js employee.js var db = require("../core/db"); var httpMsgs = require("../core/httpMsgs"); var util = require

我开发了一个纯node.js REST应用服务器,它连接到MSSQL数据库,并使用端点请求员工记录

当我请求所有员工记录或使用REST GET请求请求一个员工记录时,我收到了重复记录。响应同时具有记录集和记录集部分。这是否正确?如果正确,如何防止重复记录

你的帮助将不胜感激

db.js

employee.js

var db = require("../core/db");
var httpMsgs = require("../core/httpMsgs");
var util = require("util");

exports.getList = function (req, resp) {
    db.executeSql("SELECT * FROM EMPLOYEE", function (data, err) {
        if (err) {
            httpMsgs.show500(req, resp, err);
        }
        else {
            httpMsgs.showJSON(req, resp, data);
        }
    });
};

exports.get = function (req, resp, empno) {
    db.executeSql("SELECT * FROM EMPLOYEE WHERE EMPLOYEE_NUMBER =" + empno, function (data, err) {
        if (err) {
            httpMsgs.show500(req, resp, err);
        }
        else if (data.recordset >= "0") {
            (httpMsgs.showJSON(req, resp, data));
        }
        else {
            httpMsgs.show404(req, resp, err);
        }
    });

};
server.js

var http = require("http");
var emp = require("../controllers/employees");
var settings = require("../settings");
var httpMsgs = require("./httpMsgs");

http.createServer(function (req, resp) {
    switch (req.method) {
        case "GET":
            if (req.url === "/") {
                httpMsgs.showHome(req, resp);
            }
            else if (req.url === "/employees") {
                emp.getList(req, resp);
            }
            else {
                var empnoPatt = "[A-Za-z0-9_]+";
                var patt = new RegExp("/employees/" + empnoPatt);
                if (patt.test(req.url)) {
                    patt = new RegExp(empnoPatt);
                    var empno = req.url.split('/')[2];
                    emp.get(req, resp, empno);
                }
                else {
                    httpMsgs.show404(req, resp);
                }
            }
            break;
        case "POST":
            if (req.url === "/employees") {
                var reqBody = "";
                req.on("data", function (data){
                    reqBody += data;
                    if (reqBody.length > 1e7) //10MB
                    {
                        httpMsgs.show413(req, resp);
                    };
                });
            }
            else {
                httpMsgs.show404(req, resp);
            }
            break;
        case "PUT":
            if (req.url === "/employees") {

            }
            else {
                httpMsgs.show404(req, resp);
            }
            break;
        case "DELETE":
            if (req.url === "/employees") {

            }
            else {
                httpMsgs.show404(req, resp);
            }
            break;
        default:
            httpMsgs.show405(req, resp);
            break;
    }

}).listen(settings.webPort, function () {
    console.log("Server Started Listening at: " + settings.webPort);
});
这是从JSON响应返回stringify的httpMsgs

exports.showJSON = function (req, resp, data) {
    resp.writeHead(200, { "Content-Type": "application/json" });
    resp.write(JSON.stringify(data));
    resp.end();
};
这是我在请求employee_number=100的employee记录时得到的JSON响应

{
  "recordsets": [
    [
      {
        "RECORD_KEY": "951112558721130050",
        "EMPLOYEE_NUMBER": "100",
        "FIRST_NAME": "SAMPLE CLERK",
        "LAST_NAME": null,
      }
    ]
  ],
  "recordset": [
    {
      "RECORD_KEY": "951112558721130050",
      "EMPLOYEE_NUMBER": "100",
      "FIRST_NAME": "SAMPLE CLERK",
      "LAST_NAME": null,
    }
  ],
  "output": {},
  "rowsAffected": [
    1
  ]
}

有相当多的代码缺失:我们不知道处理请求时会发生什么(即调用函数
executeSql
,回调…)。我用更多的代码更新了这个问题。我省略了httpMsgs.js,它用于处理发送给用户的http格式的消息。正如我们所说的数据库连接设置(settings.js),您正在通过
sqldb
驱动程序的
data
属性而不做任何更改,因此您的问题与db驱动程序实现有关。但是如果我不得不猜测的话,一个记录集是行和记录集可能包含这个过程最近的查询。
{
  "recordsets": [
    [
      {
        "RECORD_KEY": "951112558721130050",
        "EMPLOYEE_NUMBER": "100",
        "FIRST_NAME": "SAMPLE CLERK",
        "LAST_NAME": null,
      }
    ]
  ],
  "recordset": [
    {
      "RECORD_KEY": "951112558721130050",
      "EMPLOYEE_NUMBER": "100",
      "FIRST_NAME": "SAMPLE CLERK",
      "LAST_NAME": null,
    }
  ],
  "output": {},
  "rowsAffected": [
    1
  ]
}