node.js - 使用 Node.JS 从文本文件发出命令

标签 node.js command-line-interface fs

对于类作业,我需要创建一个类似 Siri 的程序,该程序接受命令和参数并从 API 返回一些数据,或者在一种特定情况下,从文本文件读取并执行该文件中的命令以获取特定歌曲的数据。我了解如何使用 FS 模块读取文件,但我不了解如何让它实际使用返回的内容以使其成为命令并执行(本质上是 myPlayList(我想要那样)。下面是到目前为止的代码,分为选择案例和函数以及文本文件中的内容。这是我的第一篇文章,我认为看到整个代码将更好地提供有关正在发生的事情的上下文。

var keys = require("./keys.js") 
var twitter = require("twitter");
var omdb = require("request");
var spotify = require("spotify");
var fs = require("fs");

var liriCommand = process.argv[2];
var searchTitle = process.argv[3];

var twitterKeys = keys.twitterKeys;

var twitterUser = new twitter({
    consumer_key: twitterKeys.consumer_key,
    consumer_secret: twitterKeys.consumer_secret,
    access_token_key: twitterKeys.access_token_key,
    access_token_secret: twitterKeys.access_token_secret
});
//console.log(twitterUser); okay keys working

//Switch cases to call function based on liriCommand entered.
switch(liriCommand) {
    case "my-tweets":
    myTweets();
    break;

    case "spotify-this-song":
    myPlayList();
    break;

    case "movie-this":
    myMovie();
    break;

    case "do-what-it-says":
    randomPick();
    break;
}

//Function for pulling in last 20 tweets

function myTweets(){
    twitterUser.get('search/tweets', {q: 'burgeoningbaker', count: 20}, function(error, tweet, response) {
        if(error){
            console.log(error);
        }else{
            console.log(tweet);
        }
    });
};

//Function for pulling in artist, song name, link to song and album with song via Spotify
function myPlayList(){
    if (!searchTitle){
        searchTitle = 'The Sign';
    }

    spotify.search({type: 'track', query: searchTitle}, function(err, data){
        if (err){
            console.log('Error occurred: ' + err);
            return;
        }
        //Handle Data
        var albumTrack = data.tracks.items;

        for (i=0; i < albumTrack.length; i++){
        console.log("Artist: " + albumTrack[i].artists[i].name);
        console.log("Album Title: " + albumTrack[i].album.name);
        console.log("Spotify Link: " + albumTrack[i].preview_url);
        console.log("Track Title: " + albumTrack[i].name);
        // } else if (!data && !err){
        // myPlaylist('The Sign');
        }
    };
    
};

//Function for using request to get OMDB movie information from movie object
// Move Title, Year of release, Rating, Country, Language, Plot, Actors, Rotten Tomato Rating, URL

function myMovie(){};

// Function to fire off if typed do what it says

function randomPick(){
    fs.readFile("random.txt", "UTF-8", function(error, data){
        if (error){
            console.log(error);
        }
            console.log(data);

    });
};

这是文本文件内容

spotify-这首歌,“我想要那样”

最佳答案

嗯..奇怪的赋值指令 - 从文本文件中读取,其中文本文件只是一个“命令”和一个参数。这是作业所要求的,还是你解释的方式?在我看来,这个应用程序作为命令行界面更有意义,您可以只向它提供歌曲名称,而不是更新 .txt 文件然后调用该应用程序。

无论如何,假设您想要这样,就像您所描述的那样,您的函数调用实际上永远不会传递歌曲名称 - 请注意,您的函数调用会在不带参数的情况下触发 myPlaylist() :

案例“spotify-this-song”: myPlayList(); 中断;

并且 myPlaylist 不接受任何参数:

函数 myPlayList(){ 如果(!搜索标题){ searchTitle = '标志'; }

这个 if 语句将始终评估为 true,因为您从未传入 searchTitle。请注意,您定义的顶部 var searchTitle = process.argv[3]; 可能表明该应用程序应该设计为命令行界面。

关于node.js - 使用 Node.JS 从文本文件发出命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42143726/

相关文章:

javascript - Ajax 检测提交何时完成

git错误: fatal: unable to access 'https://dev.azure.com/****/' : Recv failure: Connection was reset while cloning

node.js - Jest 模拟 FS 文件流

linux - 将 pv 输出重定向到文件

javascript - writeSync() 仅在 console.log 存在时写入控制台(node.js)

javascript - 为什么我的fs错误在Node.js中返回空对象?

node.js - 如何使用 NodeJS 进行单点登录?

node.js - 检测可观察量何时连续两次发出相同的值

javascript - 在 node.js 中删除文件的一部分

bash - 使用 shell 脚本编辑文本格式