2017-07-24 211 views
0

我試圖從sql查詢中得到結果。 我有以下的類,它應該執行的SQL連接和查詢:「x」不是構造函數

'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。 我在做什麼錯?

回答

3

在Node.js中有兩種導出和訪問函數變量的方法。一種是通過創建一個全局函數並將所有函數,變量放入該函數並使用module.exports作爲一個整體導出該模塊。

另一種方法是通過exports導出函數,然後在您的特定文件中訪問該函數。所以你的情況,你可以做到這一點在任何的低於2 ways-

1方法:全球範圍內使用您的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(); 
     }) 
+0

謝謝你的詳細答案。它完美地工作 –

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或構造函數。

+0

嘗試過的很好,得到同樣的錯誤 –

+0

可能是你忘了刪除這首'讓utils的=新utilsPage();' – jun

+0

它應該給另一個錯誤吧?像'utils沒有定義'。嘗試在您的主頁面中用'utilsPage.GetEmpName('100001387');'替換utils.GetEmpName('100001387');'。 – jun