在 Node.js 中,使用 Prompt 请求一个值,并在主 js 文件中使用该值
In Node.js, asking for a value using Prompt, and using that value in a main js file
我是 node.js 的新手,它似乎很容易使用,但是当涉及到使用命令行获取值并返回该值以用于另一个包或 .js
,似乎比我想象的要难。
长话短说,我已经成功地使用了 npm package (akamai-ccu-purge
), to enter a file to purge on the akamai 网络。
我想通过提示用户输入他们想要清除的文件然后在 akamai 包中使用它来使其更加动态。
在使用 var stdin = process.openStdin();
进行了几次尝试后,我实际上发现了另一个名为 Prompt
的 npm 包,它似乎更容易。这两种方式似乎都有同样的问题。
节点似乎不想停下来等待输入。它似乎想要在不等待输入的情况下自动进行清除,即使我已经先调用了该模块。它实际上到了我应该输入文件的地步,但它没有等待。
我在这里的理解或用法肯定遗漏了一些东西,我做错了什么?
到目前为止我的代码是:
var purgeUrl = require('./getUrl2');
var PurgerFactory = require('../../node_modules/akamai-ccu-purge/index'); // this is the directory where the index.js of the node module was installed
// area where I placed the authentication tokens
var config = {
clientToken: //my tokens and secrets akamai requires
};
// area where urls are placed. More than one can be listed with comma separated values
var objects = [
purgeUrl // I am trying to pull this from the getUrl2 module
];
// Go for it!
var Purger = PurgerFactory.create(config);
Purger.purgeObjects(objects, function(err, res) {
console.log('------------------------');
console.log('Purge Result:', res.body);
console.log('------------------------');
Purger.checkPurgeStatus(res.body.progressUri, function(err, res) {
console.log('Purge Status', res.body);
console.log('------------------------');
Purger.checkQueueLength(function(err, res) {
console.log('Queue Length', res.body);
console.log('------------------------');
});
});
});
getUrl2
模块如下所示:
var prompt = require('../../node_modules/prompt');
//
// Start the prompt
//
prompt.start();
//
// Get property from the user
//
prompt.get(['newUrl'], function (err, result) {
//
// Log the results.
//
console.log('Command-line input received:');
console.log(' http://example.com/custom/' + result.newUrl);
var purgeUrl = 'http://example.com/custom/' + result.newUrl;
console.log(purgeUrl);
module.exports = purgeUrl;
});
再次感谢您的帮助!
我可能只允许 getURL2
公开将在主模块中调用的 方法 。例如:
// getURL2
var prompt = require('../../node_modules/prompt');
module.exports = {
start: function(callback) {
prompt.start();
prompt.get(['newUrl'], function (err, result) {
// the callback is defined in your main module
return callback('http://example.com/custom/' + result.newUrl);
});
}
}
然后在你的主模块中:
require('./getUrl2').start(function(purgeURL) {
// do stuff with the purgeURL defined in the other module
});
实现方式可能不同,但从概念上讲,您需要使第二个模块成为该输入的结果,该模块需要用户进行某种输入。回调是执行此操作的常用方法(Promises 也是如此)。但是,由于 prompt
不一定公开需要 Promise 的方法,因此您可以使用普通的旧回调来实现。
您可能还想搜索有关使用 Node 编写命令行工具(有时称为 CLI)或命令行应用程序的文章。我发现以下文章对我自己解决这个问题很有帮助:
http://javascriptplayground.com/blog/2015/03/node-command-line-tool/
此外,command-line-args 模块对我来说效果很好(尽管还有许多其他模块可供选择):
https://www.npmjs.com/package/command-line-args
祝你好运!
我是 node.js 的新手,它似乎很容易使用,但是当涉及到使用命令行获取值并返回该值以用于另一个包或 .js
,似乎比我想象的要难。
长话短说,我已经成功地使用了 npm package (akamai-ccu-purge
), to enter a file to purge on the akamai 网络。
我想通过提示用户输入他们想要清除的文件然后在 akamai 包中使用它来使其更加动态。
在使用 var stdin = process.openStdin();
进行了几次尝试后,我实际上发现了另一个名为 Prompt
的 npm 包,它似乎更容易。这两种方式似乎都有同样的问题。
节点似乎不想停下来等待输入。它似乎想要在不等待输入的情况下自动进行清除,即使我已经先调用了该模块。它实际上到了我应该输入文件的地步,但它没有等待。
我在这里的理解或用法肯定遗漏了一些东西,我做错了什么?
到目前为止我的代码是:
var purgeUrl = require('./getUrl2');
var PurgerFactory = require('../../node_modules/akamai-ccu-purge/index'); // this is the directory where the index.js of the node module was installed
// area where I placed the authentication tokens
var config = {
clientToken: //my tokens and secrets akamai requires
};
// area where urls are placed. More than one can be listed with comma separated values
var objects = [
purgeUrl // I am trying to pull this from the getUrl2 module
];
// Go for it!
var Purger = PurgerFactory.create(config);
Purger.purgeObjects(objects, function(err, res) {
console.log('------------------------');
console.log('Purge Result:', res.body);
console.log('------------------------');
Purger.checkPurgeStatus(res.body.progressUri, function(err, res) {
console.log('Purge Status', res.body);
console.log('------------------------');
Purger.checkQueueLength(function(err, res) {
console.log('Queue Length', res.body);
console.log('------------------------');
});
});
});
getUrl2
模块如下所示:
var prompt = require('../../node_modules/prompt');
//
// Start the prompt
//
prompt.start();
//
// Get property from the user
//
prompt.get(['newUrl'], function (err, result) {
//
// Log the results.
//
console.log('Command-line input received:');
console.log(' http://example.com/custom/' + result.newUrl);
var purgeUrl = 'http://example.com/custom/' + result.newUrl;
console.log(purgeUrl);
module.exports = purgeUrl;
});
再次感谢您的帮助!
我可能只允许 getURL2
公开将在主模块中调用的 方法 。例如:
// getURL2
var prompt = require('../../node_modules/prompt');
module.exports = {
start: function(callback) {
prompt.start();
prompt.get(['newUrl'], function (err, result) {
// the callback is defined in your main module
return callback('http://example.com/custom/' + result.newUrl);
});
}
}
然后在你的主模块中:
require('./getUrl2').start(function(purgeURL) {
// do stuff with the purgeURL defined in the other module
});
实现方式可能不同,但从概念上讲,您需要使第二个模块成为该输入的结果,该模块需要用户进行某种输入。回调是执行此操作的常用方法(Promises 也是如此)。但是,由于 prompt
不一定公开需要 Promise 的方法,因此您可以使用普通的旧回调来实现。
您可能还想搜索有关使用 Node 编写命令行工具(有时称为 CLI)或命令行应用程序的文章。我发现以下文章对我自己解决这个问题很有帮助:
http://javascriptplayground.com/blog/2015/03/node-command-line-tool/
此外,command-line-args 模块对我来说效果很好(尽管还有许多其他模块可供选择):
https://www.npmjs.com/package/command-line-args
祝你好运!