node js mssql问题 - 调整mysql示例

时间:2018-01-08 07:07:43

标签: sql sql-server node.js windows node-modules

我正在尝试将 mysql crud示例改编为 mssql

http://teknosains.com/i/simple-crud-nodejs-mysql

这是git:

https://github.com/codetrash/nodecrud

我改变了这个功能:

exports.list = function(req, res){

req.getConnection(function(err,connection){

    var query = connection.query('SELECT * FROM customer',function(err,rows)
    {

        if(err)
            console.log("Error Selecting : %s ",err );

        res.render('customers',{page_title:"Customers - Node.js",data:rows});


     });

     //console.log(query.sql);
});

};

对此:

exports.list = function(req, res){

// req.getConnection(function(err,connection){
    sql.connect(sqlConfig, function() {
    var request = new sql.Request();
    request.query('SELECT * FROM customer',function(err,rows)
    {
        console.log(rows);
        if(err)
            console.log("Error Selecting : %s ",err );

        res.render('customers',{page_title:"customer - Node.js",data:rows});


     });

     //console.log(query.sql);
});
//sql.close();

};

我在控制台上获得了查询的输出,因此与数据库和查询本身的连接很好,但它没有实现到ejs文件中。 (链接到ejs:https://github.com/codetrash/nodecrud/blob/master/views/customers.ejs

有什么区别?

1 个答案:

答案 0 :(得分:0)

mssql中,query的回调不会直接返回行,而是返回一个对象。返回对象的 Inside 是数组recordset,其中包含您的行。

以下是mssql documentation page

的示例
request.query('select 1 as number; select 2 as number', (err, result) => {
    // ... error checks

    console.log(result.recordset[0].number) // return 1
    console.log(result.recordsets[0][0].number) // return 1
    console.log(result.recordsets[1][0].number) // return 2
})

(顺便说一下,(err, result) => { }与此例中的function(err, result) { }相同)

NB!记录集和记录集 s 之间的区别:如果您query要求多个select,则可以通过recordset[x]。但据我所知,recordset始终是select中第一个query的结果。你可以使用recordset来获得更清晰的代码。

只需将代码更改为

request.query('SELECT * FROM customer',function(err,result)
{
    console.log(result);
    if(err)
        console.log("Error Selecting : %s ",err );

    res.render('customers',{page_title:"customer - Node.js",data:result.recordset});


 });