我试图从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
。
我做错了什么?
答案 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
或构造函数。