【问题标题】:Using Node.JS to Issue a Command from a Text File使用 Node.JS 从文本文件发出命令
【发布时间】:2020-11-04 04:32:30
【问题描述】:

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

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-this-song,“I Want It That Way”

【问题讨论】:

    标签: node.js command-line-interface fs


    【解决方案1】:

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

    无论如何,假设您描述了you want it that way,您的函数调用实际上从未传递歌曲名称 - 请注意您的函数调用会触发 myPlaylist() 且不带任何参数:

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

    myPlaylist 不接受任何参数:

    function myPlayList(){ if (!searchTitle){ searchTitle = 'The Sign'; }

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

    【讨论】:

    • 是的,myPlayList 的初始功能是获取您要在 Spotify API 中搜索的曲目的命令行参数。如果发出的命令没有歌曲标题,则默认搜索 The Sign。最后一个案例是我关注的地方。当它被调用时,它应该查看文本文件并发出其中的命令,该命令应该是搜索我想要的轨道。我不想发布实际的作业说明,但如果能让事情更清楚,我可以发布。
    • 对 - 参考我之前的评论 - 你的 myPlayList 函数不能接受命令行参数以外的参数。所以你的解决方案是修改它来这样做
    • 如果是这样的话,我觉得它仍然会循环回到尝试访问该文件并在其中发出命令。以下是关于应该做什么的说明... node liri.js spotify-this-song '' * 这将在您的终端/bash 窗口中显示有关歌曲的以下信息 * Artist(s) *歌曲名称 * 如果没有提供歌曲,那么您的程序将默认为 * “The Sign” by Ace of Base
    • node liri.js do-what-it-says 使用 fs Node 包,LIRI 将获取 random.txt 中的文本,然后使用它来调用 LIRI 的命令之一。它应该为“I Want it That Way”运行 spotify-this-song,如下所示 random.txt 中的文本。也许我有一个需要离开项目并重新开始的情况。
    • 是的,我不知道这是什么级别的课程,第一年,第二年等等 - 但你快到了 - 如果你不能得到它,请稍后告诉我,我'看看我是否有时间发布解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2010-11-03
    • 1970-01-01
    • 2013-04-28
    • 2013-10-14
    • 2022-12-17
    • 1970-01-01
    相关资源
    最近更新 更多