命令行更改默认的硬编码值"/>
javascript 使用命令行更改默认的硬编码值
我想添加一个功能,当用户在命令行“node filename.js option”中输入时,它会要求用户输入 batchSize、startDate、endDate、frequencyUpload 的新默认值,当我再次运行“node”时filename.js' 新输入的值现在将是默认值。
我试过了,但没用
const sql = require('mssql');
const jwt = require('jsonwebtoken');
const axios = require('axios');
const ms = require('ms');
const { format } = require('date-fns');
const config = {
user: 'leo',
password: 'Leocoronel24',
server: '192.168.13.33',
database: 'TKMANAGER',
port: 1433,
options: {
encrypt: false,
trustServerCertificate: true
}
};
const logs = [];
let intervalId;
// create a function to connect to the database and retrieve data
async function getData(batchSize, startDate, endDate) {
// your existing code for getting data goes here
try {
// connect to the database
await sql.connect(config);
console.log('Connected to the database');
const formattedStartDate = format(new Date(startDate), 'yyyy-MM-dd HH:mm:ss');
const formattedEndDate = format(new Date(endDate), 'yyyy-MM-dd HH:mm:ss');
// create a request object to retrieve data
let sqlquery = `SELECT TOP ${batchSize} Employeenum, DTRDATE, COMPANYID, FUNCTIONKEY,
CASE WHEN FunctionKey = 1 THEN DTRTIMEIN ELSE DTRTIMEOUT END AS TRANSACTIONTIME,
[NAME], SeqID
FROM viewDTR1
WHERE DTRDATE BETWEEN '${formattedStartDate}' AND '${formattedEndDate}'`;
//WHERE DTRDATE BETWEEN '2023-03-01' AND '2023-03-15'`;
const result = await sql.query(sqlquery);
let entries = result.recordset.map(row => ({
dtrdate: row.DTRDATE,
datetime: row.TRANSACTIONTIME,
type: String(row.FUNCTIONKEY),
location: row.NAME,
company: row.COMPANYID,
cardno: row.Employeenum,
ipaddress: '192.168.1.1'
}));
let data = { entries: entries };
//console.log(JSON.stringify(data));
console.log(JSON.stringify(data, null, 4));
//logs.push(`Retrieved ${entries.length} entries at ${transactionTime()}.`);
//logs.push(`Retrieved data: ${JSON.stringify(entries, null, 4)}\n at ${transactionTime()}.`);
logs.push(`Retrieved data: ${JSON.stringify(entries)}\n at ${transactionTime()}.`);
const response = await axios.post(':8000/tkserve/uptk.php', {
entries
}, {
headers: {
'Content-Type': 'application/json'
},
method: 'POST'
});
console.log(response.data);
} catch (error) {
console.log(error);
} finally {
sql.close();
console.log('Disconnected from the database');
}
}
function isValidDate(dateString) {
const regex = /^\d{4}-\d{2}-\d{2}$/;
if(!regex.test(dateString)) {
return false;
}
const date = new Date(dateString);
if (isNaN(date.getTime())) {
return false;
}
return true;
}
function transactionTime() {
const now = new Date();
return format(now, 'yyyy-MM-dd HH:mm:ss');
}
function startDataRetrieval(batchSize, uploadFrequency, startDate, endDate) {
const transactionStartTime = transactionTime();
console.log(`Transaction started at ${transactionStartTime}`);
getData(batchSize, startDate, endDate);
intervalId = setInterval(() => {
getData(batchSize, startDate, endDate);
}, ms(uploadFrequency));
}
function stopDataRetrieval() {
clearInterval(intervalId);
}
const defaults = {
batchSize: 10,
startDate: '2023-01-01',
endDate: '2023-01-31',
uploadFrequency: '10s'
};
// parse command-line arguments for batch size, start date, end date, and upload frequency
let args = process.argv.slice(2);
if(args[0] === 'option'){
function promptForNewValues() {
rl.question('Enter new default batchSize: ', (batchSize) => {
rl.question('Enter new default startDate (yyyy-mm-dd): ', (startDate) => {
rl.question('Enter new default endDate (yyyy-mm-dd): ', (endDate) => {
rl.question('Enter new default uploadFrequency (e.g. 10s, 1m, 1h): ', (uploadFrequency) => {
// update defaults here
defaults.batchSize = batchSize;
defaults.startDate = startDate;
defaults.endDate = endDate;
defaults.uploadFrequency = uploadFrequency;
console.log('Defaults updated.');
rl.close();
});
});
});
});
}
}
else{
let batchSize = args[0] || defaults.batchSize;
let startDate = args[1] || defaults.startDate;
let endDate = args[2] || defaults.endDate;
let uploadFrequency = args[3] || defaults.uploadFrequency;
if (!isValidDate(startDate) || !isValidDate(endDate)) {
console.log('Invalid date format. Please enter dates in yyyy-mm-dd format.');
} else if (startDate === endDate) {
console.log('Start date and end date should not be the same.');
} else {
startDataRetrieval(batchSize, uploadFrequency, startDate, endDate);
}
}
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// allow user to stop data retrieval by pressing "s" or "S"
process.stdin.setRawMode(true);
process.stdin.resume();
process.stdin.on('data', (data) => {
if (data.toString().trim() === 'p' || data.toString().trim() === 'P') {
stopDataRetrieval();
console.log('Data retrieval stopped.');
process.exit();
} else if (data.toString().trim() === 'c' || data.toString().trim() === 'C') {
promptForNewValues();
}
});
console.log('Press "p" or "P" to stop data retrieval.');
console.log('Press "c" or "C" to update default values.');
回答如下:
更多推荐
javascript 使用命令行更改默认的硬编码值
发布评论