Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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 SQL Server在一次调用中返回两次结果?_Javascript_Sql_Node.js_Express - Fatal编程技术网

Javascript SQL Server在一次调用中返回两次结果?

Javascript SQL Server在一次调用中返回两次结果?,javascript,sql,node.js,express,Javascript,Sql,Node.js,Express,我已将SQL Server数据库连接到一个简单的node.js服务器。当我运行代码时,记录集和记录集都返回给我。它们本质上都包含相同的数据。我可以用这个,但它似乎是多余的,将是整洁的,只是调用正是我需要的记录 我希望得到一个清晰的ELI5解释,因为在我看来,mssqlnpm文档有些混乱 代码如下: const express = require('express'); const cors = require('cors'); const sql = require('mssql'); cons

我已将SQL Server数据库连接到一个简单的node.js服务器。当我运行代码时,记录集和记录集都返回给我。它们本质上都包含相同的数据。我可以用这个,但它似乎是多余的,将是整洁的,只是调用正是我需要的记录

我希望得到一个清晰的ELI5解释,因为在我看来,
mssql
npm文档有些混乱

代码如下:

const express = require('express');
const cors = require('cors');
const sql = require('mssql');
const app = express();
const sqlServer = 'hasea\\SQLExpress'

const selectAllQuery = 'SELECT * FROM dbo.users';
const config = {
    user: 'nbar',
    password: 'nb',
    server: sqlServer,
    database: 'nirvanaBar'
}

// SQL Select function
function DBconn(query, res) {

    sql.connect(config, function (err) {
        if (err) console.log(err);
        var request = new sql.Request();

        request.query(query, function (err, row) {
            if (err) console.log(err)
            res.json({
                data: row
            })
        })
    })
}
app.use(cors());

app.get('/', (req, res) => {
    res.send("Hello from the server")
});

app.get('/users', (req, res) => {
    //query?
    //var andrew = "select * from dbo.users where firstName = 'Andrew';"
    var matt = "select * from dbo.users where firstName = 'Matt';"
    //DBconn(selectAllQuery,res);
    DBconn(matt, res);

})
app.listen(4000, () => {
    console.log(`Server started on port 4000`)
})
结果是:

我可以看到之前有人提到过这一点,但我不了解发生了什么,文档也没有提供太多信息说明为什么会出现这种情况。我可以使用数据,我只是认为返回记录集和记录集会更整洁


提前感谢

这是mssql的预期行为。请查看文档。当您执行多个语句时,它允许您拥有多个记录集

您会注意到实际上有两个属性

记录集(单数) 及 记录集(复数)

记录集(单数)指执行的第一条语句。在你的情况下,你可以用这个


记录集(复数)是一个记录集数组,在您的情况下,数组中只有一个记录集,因为您只运行一条语句。

请明确,我没有办法避免这一点,也没有使用更多资源来调用复数和单数。我正在阅读文档,但没有完全理解它。您是对的,它不会使用更多的资源,因为SQL命令是相同的,并且对象在内存中只有一个引用,即使它出现在两个属性中。