" X"不是构造函数

时间:2017-07-24 06:36:11

标签: javascript sql-server-2008 protractor

我试图从Sql查询中获取结果。 我有以下类应该执行Sql连接和查询:



'use strict';

 //db.js
const sql = require('mssql');
require('dotenv').config();

var utils = function(){

var config = {
  server: 'sql01',
  database: 'db123',
  options: {
   instanceName: 'in1',
   encrypt: true
  }
};

module.exports = {

/** Define sql queries here  */
  GetEmpName(id) {
    let my_query = `Select filed1 FROM db123 WHERE id='${id}'`;
    sql.connect(config).then(function () {
      new sql.Request()
        .query(my_query).then(function (recordset) {}).catch(function (err) {
          console.log(err);
        });
    });
  }
};
};
     




那是主页:



'use strict;'
 let HomePage = require('../page/home_page.js');
 let utilsPage = require('../utils/utils.js');
describe("login to website",function(){
     let employeeId;
     let employeeBday;
     let home = new HomePage();
     //let utils = new utilsPage();
      
    it('get an employee's Id', function (done) {
       utilsPage.GetEmpName('100001387');
       done();
    })
});
 




我收到错误消息:utilsPage is not a constructor。 我做错了什么?

2 个答案:

答案 0 :(得分:3)

在Node.js中,有两种导出和访问函数变量的方法。一种方法是创建一个全局函数,并将所有函数,变量放入其中,并使用module.exports将该模块作为一个整体导出。

另一种方法是通过exports导出函数,然后在特定文件中访问该函数。所以在你的情况下,你可以用以下两种方式中的任何一种来做 -

第一种方法:全局使用Utils功能 -

'use strict';

 //db.js
const sql = require('mssql');
require('dotenv').config();

var utils = function(){

this.config = {
  server: 'sql01',
  database: 'db123',
  options: {
   instanceName: 'in1',
   encrypt: true
  }
};


/** Define sql queries here  */
  this.getEmpName = function(id) {
    let my_query = `Select filed1 FROM db123 WHERE id='${id}'`;
    sql.connect(config).then(function () {
      new sql.Request()
        .query(my_query).then(function (recordset) {}).catch(function (err) {
          console.log(err);
        });
    });
  }
};

module.exports = new utils();

你可以像使用它一样使用它 -

 'use strict;'
 let HomePage = require('../page/home_page.js');
 let utilsPage = require('../utils/utils.js');
describe("login to website",function(){
     let employeeId;
     let employeeBday;
     let home = new HomePage();

    it('get an employee's Id', function (done) {
       utilsPage.getEmpName('100001387');
       done();
    })
});

第二种方法:仅导出getEmpName功能 -

'use strict';

 //db.js
const sql = require('mssql');
require('dotenv').config();


var config = {
  server: 'sql01',
  database: 'db123',
  options: {
   instanceName: 'in1',
   encrypt: true
  }
};


/** Define sql queries here  */
  exports.getEmpName = function(id) {
    let my_query = `Select filed1 FROM db123 WHERE id='${id}'`;
    sql.connect(config).then(function () {
      new sql.Request()
        .query(my_query).then(function (recordset) {}).catch(function (err) {
          console.log(err);
        });
    });
  }

您也可以使用它:

'use strict;'
     let HomePage = require('../page/home_page.js');
     let utilsPage = require('../utils/utils.js');
    describe("login to website",function(){
         let employeeId;
         let employeeBday;
         let home = new HomePage();

        it('get an employee's Id', function (done) {
           utilsPage.getEmpName('100001387');
           done();
        })

答案 1 :(得分:1)

utils.js文件中,您不应将代码包装在utils函数中

'use strict';

//db.js
const sql = require('mssql');
require('dotenv').config();

var config = {
    server: 'sql01',
    database: 'db123',
    options: {
        instanceName: 'in1',
        encrypt: true
    }
};

module.exports = {
    /** Define sql queries here  */
    GetEmpName(id) {
        let my_query = `Select filed1 FROM db123 WHERE id='${id}'`;
        sql.connect(config).then(function () {
            new sql.Request()
                .query(my_query).then(function (recordset) { }).catch(function (err) {
                    console.log(err);
                });
        });
    }
};

在您的主页文件中,您可以像这样访问导出的模块

utilsPage.GetEmpName('100001387')

无需致电new utilsPage()。要使用关键字new,您必须导出class或构造函数。