首页 > 解决方案 > 节点 express 引用错误响应未定义

问题描述

    
    
    var _expressPackage = 要求(“快递”);  
            var _bodyParserPackage = require("body-parser");  
            var _sqlPackage = 要求(“mssql”);  
        //使用 express web 框架初始化应用程序  
            var app = _expressPackage();  
        //以json格式解析结果  
            app.use(_bodyParserPackage.json());  
          
        ***//这里我们要开启CORS,这样我们就可以跨域访问api了***  
            app.use(function (req, res, next) {  
            res.header("Access-Control-Allow-Origin", "*");  
            res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");  
            res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-
   类型,
            接受、授权”);  
            下一个();  
             });  
          
        ***//让我们现在设置我们的本地服务器。***  
            var server = app.listen(process.env.PORT || 4000, function () {  
            var port = server.address().port;  
            console.log("App 正在端口上运行", port);  
           });  
          
        ***//设置你的sql连接字符串,我这里用的是我自己的,你要替换成你的
         自己的。***  
            var dbConfig = {  
            用户:“sa1”,  
            密码:“12345”,  
            服务器:“本地主机”,  
            数据库:“test123”  
              };  
          
        ***//连接数据库并执行查询的函数***  
                  var QueryToExecuteInDatabase = 函数(响应,strQuery){  
            ***//在创建连接之前关闭sql连接,否则会报错
             连接已存在。***  
                   _sqlPackage.close();  
            //现在连接你的sql连接  
                   _sqlPackage.connect(dbConfig, function (error) {  
                    如果(错误){  
                       console.log("连接数据库时出错:-" + error);  
                       response.send(错误);  
                    }  
                    别的 {  
                    ***//让我们为sql对象创建一个请求***  
                        var request = new _sqlPackage.Request();  
                    //查询在我们的数据库中运行  
                        request.query(strQuery, function (error, responseResult) {  
                            如果(错误){  
                               console.log("连接数据库时出错:-" + error);  
                               response.send(错误);  
                            }  
                            别的 {  
                                response.send(responseResult);  
                            }  
                        });  
                    }  
                });             
             }  
          
        ***//获取API***  
            app.get("/StudentList", function(_req ,_res){  
            var Sqlquery = "select * from student1"; ***//tbl_studentdetails***
            QueryToExecuteInDatabase(_res, Sqlquery);  
            });
    
        ***//调用存储过程***
            var request = new _sqlPackage.Request();  
           ***//调用存储过程***  
                        request.input('用户名', _sqlPackage.VarChar(50), 'admin');  
                        request.input('密码', _sqlPackage.VarChar(50), 'admin@123');  
                        request.execute('sp_CheckLogin', function (err, recordsets, returnValue) {  
                            response.send(记录集);  
                        });
    
    

> (D:\performalytic\9999.practice\angularpra\NodeApiWithSql\node_modules\mssql\lib\tedious\request.js:701:23)
    在 processImmediate (internal/timers.js:463:21)
- 结束片段-->

标签: javascriptnode.jsexpress

解决方案


这个问题可以更清楚一点......但是由于提供的信息有限,您在这里遇到的问题似乎与词汇范围有关。

词法范围最简单地与当前执行上下文可以访问的变量有关。在函数内部,您可以访问在函数中声明的变量......或在周围的代码中。被剪断的代码的最后一行显示了一个顶级变量request和该对象上的一个名为execute.

您传递给该execute方法的回调具有您命名的三个变量(函数参数)errrecordsetsreturnValue。然而,在该函数体内,您正试图访问一个名为response. 如果我们查看周围的代码......没有response声明变量。response(我看到的唯一名为的变量在 内QueryToExecuteInDatabase,因此只能在该函数体内访问。

你从哪里得到这个模板代码?


推荐阅读