从 module2.js 调用 nodejs module1.js 然后解析一些变量
calling nodejs module1.js from module2.js then parse some variables
又是我。 :-D
我的下一个奇怪问题是:
我有 2 个 nodejs 模块:
//module1.js
const prompt = require('prompt');
var Excel = require('exceljs');
var wbCO = new Excel.Workbook();
var iCO = 1;
wbCO.xlsx.readFile('costumers.xlsx').then(function (){
shCO = wbCO.getWorksheet("Sheet");
while (iCO <= shCO.rowCount){
console.log(shCO.getRow(iCO).getCell(1).value +" - "+ shCO.getRow(iCO).getCell(2).value);
iCO++;
}
});
prompt.start();
prompt.get([{name:'costumer', required: true, conform: function (value) {
return true;
}
}], function (key_err, key_result) {
if (key_err) { return onErr(key_err); }
var Ccostumer = shCO.getRow(key_result.costumer).getCell(2).value;
var user = shCO.getRow(key_result.costumer).getCell(3).value;
var pass = shCO.getRow(key_result.costumer).getCell(4).value;
function onErr(key_err) {
console.log(key_err);
return 1;
}
});
//module2.js
wb.xlsx.readFile('./'+Ccostumer+'/File.xlsx').then(function(){
sh = wb.getWorksheet("Sheet1");
start_page(sh);
});
async function start_page(sh){
var i = 2;
var result_id = 1;
const browser = await puppeteer.launch({headless: true});
while(i <= sh.rowCount){
var result_cell = sh.getRow(i).getCell(3).text;
await open_page(browser, result_cell, result_id);
i++;
result_id++;
}
browser.close();
}
async function open_page(browser, result_cell, result_id) {
const page = await browser.newPage();
page.setDefaultNavigationTimeout(100000);
await page.goto('https://www.mywebsite.com', {
waitUntil: 'networkidle2'
});
// authentication
await page.waitFor('input[name="ctl00$ContentPlaceHolder1$Signin1$txtEmail"]');
await page.$eval('input[name="ctl00$ContentPlaceHolder1$Signin1$txtEmail"]', elu => elu.value = user);
await page.waitFor('input[name="ctl00$ContentPlaceHolder1$Signin1$txtPassword"]');
await page.$eval('input[name="ctl00$ContentPlaceHolder1$Signin1$txtPassword"]', elp => elp.value = pass);
await page.click('input[type="submit"]');
await page.waitForNavigation();
//search
await page.waitFor('input[name="email"]');
await page.type('input[name="email"]', result_cell);
await page.click('input[type="submit"]');
我正在尝试通过 const md1 = require('./module1.js') 从 module2.js 调用 module1.js;
但我没有得到变量,两者都在同一时间 运行ning。
这就是我的问题:
1 - 如何 运行 module2.js 在 module1.js 做出选择后按 ENTER。
2 - 如何将这些变量从 module1.js 解析为 module2.js(Ccostumer、用户、通行证)。
如果您想要 return 模块中的某些内容,您只需 return 某些内容。如果你 require
另一个 Node JS 脚本,它不会自动 return 任何东西,它主要只是 "runs" 脚本。
使用module.exports
这里是 2 个模块的基本示例,一个被另一个调用,returns 是一个值。在此示例中,module1 正在导出一个函数,然后在 module2 中需要并调用该函数。
// module1.js
module.exports = () => {
/* doing stuff here */
return "someValue";
});
// module2.js
const value = require('./module1')();
console.log(value);
>> "someValue"
您必须对您的逻辑进行一点点重新排序,并可能在函数周围包装一些东西。在模块 1 中做出选择后,您希望模块 2 变为 运行。意思是,你想从 module1 调用 module2。也意味着您需要在 module1 中要求 module2,并且在您做出选择后您 运行 module2 与输出。理论上这看起来像这样:
你的例子
虽然我不相信你的代码示例是完整的,但我会尽力给你一个提示。但我不会为你做这些工作
// module1.js
const prompt = require('prompt');
const Excel = require('exceljs');
const module2 = require('./module2');
const workbook = new Excel.Workbook();
let counter = 1;
workbook.xlsx.readFile('costumers.xlsx').then( function () {
// Get Worksheet from Workbook
const sheet = workbook.getWorksheet("Sheet");
// Print Values of Worksheet
while (counter <= sheet.rowCount) {
const value1 = sheet.getRow(counter).getCell(1).value;
const value2 = sheet.getRow(counter).getCell(2).value;
console.log(`${value1} - ${value2}`);
counter++;
}
// Open prompt
prompt.start();
// Get result from prompt
prompt.get([
{
name:'costumer',
required: true
}
], function (key_err, key_result) {
if (key_err) { return console.log(key_err); }
const costumer = sheet.getRow(key_result.costumer).getCell(2).value;
const user = sheet.getRow(key_result.costumer).getCell(3).value;
const pass = sheet.getRow(key_result.costumer).getCell(4).value;
return module2(costumer, user, pass);
});
});
// module2.js
module.exports = function (costumer, user, pass) {
// Do something with costumer, user, pass
// the value you get in return from the prompt in module1.js
}
确保你的 module1.js 和 module2.js 在同一个目录中,否则 require('./module2')
将无法工作
在nodejs中,每个文件都有自己的范围,每个文件中声明的变量和函数都属于它们。
为了能够从另一个 .js 文件访问函数或变量,您需要明确导出它们
file1.js
console.log('loading file 1') // runs when the file is loaded
function fileOneFunc () {
// next line runs only when the function is called
console.log('this is the fileOneFunc running')
}
module.exports = fileOneFunc
file2.js
// the following line will have access to the exported function from file1
const f1 = require('./file1')
console.log(typeof f1)
f1()
所以,如果你想从 module1.js
到 运行 的代码仅当你想从 module2.js
中调用时,你必须将代码包装在 module1.js
在一个函数中,然后将其导出,如上所示。
然后在你的 module2.js
中按照你说的去做
const md1 = require('./module1.js')
然后只要您认为合适就调用 md1
函数。
又是我。 :-D 我的下一个奇怪问题是:
我有 2 个 nodejs 模块:
//module1.js
const prompt = require('prompt');
var Excel = require('exceljs');
var wbCO = new Excel.Workbook();
var iCO = 1;
wbCO.xlsx.readFile('costumers.xlsx').then(function (){
shCO = wbCO.getWorksheet("Sheet");
while (iCO <= shCO.rowCount){
console.log(shCO.getRow(iCO).getCell(1).value +" - "+ shCO.getRow(iCO).getCell(2).value);
iCO++;
}
});
prompt.start();
prompt.get([{name:'costumer', required: true, conform: function (value) {
return true;
}
}], function (key_err, key_result) {
if (key_err) { return onErr(key_err); }
var Ccostumer = shCO.getRow(key_result.costumer).getCell(2).value;
var user = shCO.getRow(key_result.costumer).getCell(3).value;
var pass = shCO.getRow(key_result.costumer).getCell(4).value;
function onErr(key_err) {
console.log(key_err);
return 1;
}
});
//module2.js
wb.xlsx.readFile('./'+Ccostumer+'/File.xlsx').then(function(){
sh = wb.getWorksheet("Sheet1");
start_page(sh);
});
async function start_page(sh){
var i = 2;
var result_id = 1;
const browser = await puppeteer.launch({headless: true});
while(i <= sh.rowCount){
var result_cell = sh.getRow(i).getCell(3).text;
await open_page(browser, result_cell, result_id);
i++;
result_id++;
}
browser.close();
}
async function open_page(browser, result_cell, result_id) {
const page = await browser.newPage();
page.setDefaultNavigationTimeout(100000);
await page.goto('https://www.mywebsite.com', {
waitUntil: 'networkidle2'
});
// authentication
await page.waitFor('input[name="ctl00$ContentPlaceHolder1$Signin1$txtEmail"]');
await page.$eval('input[name="ctl00$ContentPlaceHolder1$Signin1$txtEmail"]', elu => elu.value = user);
await page.waitFor('input[name="ctl00$ContentPlaceHolder1$Signin1$txtPassword"]');
await page.$eval('input[name="ctl00$ContentPlaceHolder1$Signin1$txtPassword"]', elp => elp.value = pass);
await page.click('input[type="submit"]');
await page.waitForNavigation();
//search
await page.waitFor('input[name="email"]');
await page.type('input[name="email"]', result_cell);
await page.click('input[type="submit"]');
我正在尝试通过 const md1 = require('./module1.js') 从 module2.js 调用 module1.js; 但我没有得到变量,两者都在同一时间 运行ning。
这就是我的问题:
1 - 如何 运行 module2.js 在 module1.js 做出选择后按 ENTER。
2 - 如何将这些变量从 module1.js 解析为 module2.js(Ccostumer、用户、通行证)。
如果您想要 return 模块中的某些内容,您只需 return 某些内容。如果你 require
另一个 Node JS 脚本,它不会自动 return 任何东西,它主要只是 "runs" 脚本。
使用module.exports
这里是 2 个模块的基本示例,一个被另一个调用,returns 是一个值。在此示例中,module1 正在导出一个函数,然后在 module2 中需要并调用该函数。
// module1.js
module.exports = () => {
/* doing stuff here */
return "someValue";
});
// module2.js
const value = require('./module1')();
console.log(value);
>> "someValue"
您必须对您的逻辑进行一点点重新排序,并可能在函数周围包装一些东西。在模块 1 中做出选择后,您希望模块 2 变为 运行。意思是,你想从 module1 调用 module2。也意味着您需要在 module1 中要求 module2,并且在您做出选择后您 运行 module2 与输出。理论上这看起来像这样:
你的例子
虽然我不相信你的代码示例是完整的,但我会尽力给你一个提示。但我不会为你做这些工作
// module1.js
const prompt = require('prompt');
const Excel = require('exceljs');
const module2 = require('./module2');
const workbook = new Excel.Workbook();
let counter = 1;
workbook.xlsx.readFile('costumers.xlsx').then( function () {
// Get Worksheet from Workbook
const sheet = workbook.getWorksheet("Sheet");
// Print Values of Worksheet
while (counter <= sheet.rowCount) {
const value1 = sheet.getRow(counter).getCell(1).value;
const value2 = sheet.getRow(counter).getCell(2).value;
console.log(`${value1} - ${value2}`);
counter++;
}
// Open prompt
prompt.start();
// Get result from prompt
prompt.get([
{
name:'costumer',
required: true
}
], function (key_err, key_result) {
if (key_err) { return console.log(key_err); }
const costumer = sheet.getRow(key_result.costumer).getCell(2).value;
const user = sheet.getRow(key_result.costumer).getCell(3).value;
const pass = sheet.getRow(key_result.costumer).getCell(4).value;
return module2(costumer, user, pass);
});
});
// module2.js
module.exports = function (costumer, user, pass) {
// Do something with costumer, user, pass
// the value you get in return from the prompt in module1.js
}
确保你的 module1.js 和 module2.js 在同一个目录中,否则 require('./module2')
将无法工作
在nodejs中,每个文件都有自己的范围,每个文件中声明的变量和函数都属于它们。
为了能够从另一个 .js 文件访问函数或变量,您需要明确导出它们
file1.js
console.log('loading file 1') // runs when the file is loaded
function fileOneFunc () {
// next line runs only when the function is called
console.log('this is the fileOneFunc running')
}
module.exports = fileOneFunc
file2.js
// the following line will have access to the exported function from file1
const f1 = require('./file1')
console.log(typeof f1)
f1()
所以,如果你想从 module1.js
到 运行 的代码仅当你想从 module2.js
中调用时,你必须将代码包装在 module1.js
在一个函数中,然后将其导出,如上所示。
然后在你的 module2.js
中按照你说的去做
const md1 = require('./module1.js')
然后只要您认为合适就调用 md1
函数。