简体   繁体   English

如何在node.js上拆分参数,而不会为默认搜索创建错误

[英]How can I split my parameter on node.js without creating an error for a default search

I have been trying to split process.argv[3] for when the input is more than one word, but for some reason everything I have tried so far has created these errors: when searching spotify-this-song / do-what-it-says with no parameter, instead of searching for the default it says "You must specify a type and query for your search." 我一直在尝试拆分process.argv [3],因为当输入是多个单词时,但由于某种原因,到目前为止我所尝试的一切都创建了这些错误:当搜索spotify时 - 这首歌/做什么它-says没有参数,而不是搜索默认值,它说“你必须为搜索指定一个类型和查询。” Another issue is that I tried putting my movie query in a for loop for each search to separate my default search with the queryURL, instead of searching for the parameter I input it displays nothing. 另一个问题是我尝试将我的电影查询放在每个搜索的for循环中,以将我的默认搜索与queryURL分开,而不是搜索我输入的参数,它什么也没显示。 Is it not possible to do this, or am I just having issues with syntax? 是不是可以这样做,还是我只是遇到语法问题?

require("dotenv").config();
var fs = require("fs");
var keys = require("./keys.js");
var Spotify = require("node-spotify-api");
var axios = require("axios");
var bandsintown = require("bandsintown")(keys.spotify.bandsintown);
//console.log(keys.spotify.bandsintown);
var spotify = new Spotify(keys.spotify);
var moment = require("moment");
moment().format();
//arguments
var p = process.argv;
var arg = p[2];
var v = p[3];

//execute
input(arg, v);

//funk
function input(arg, v) {
  switch (arg) {
    case "spotify-this-song":
      songQuery(v);
      break;
    case "movie-this":
      movieQuery(v);
      break;
    case "concert-this":
      bandQuery(v);
      break;
    case "do-what-it-says":
      makeMe();
      break;
    default:
      console.log(
        "Input one of the following functions with a paramter: \nspotify-this-song \nmovie-this \nconcer-this \ndo-what-it-says"
      );
  }
}

//Spotify Funk
function songQuery(v) {
  // let a = p.splice([3]).join("+");

  //default
  if (v === undefined) {
    v = "The Sign";
  }
  spotify
    .search({ type: "track", query: v, limit: 10 })
    .then(function(response) {
      //console.log(response.tracks);
      let song = response.tracks.items;
      for (i = 0; i < song.length; i++) {
        fs.appendFileSync("log.txt", "NEW QUERY\n");
        console.log(i);
        fs.appendFileSync("log.txt", i + "\n");
        console.log(song[i].artists[0].name);
        fs.appendFileSync(
          "log.txt",
          "artist: " + song[i].artists[0].name + "\n"
        );
        console.log(song[i].name);
        fs.appendFileSync("log.txt", "song: " + song[i].preview_url + "\n");
        console.log(song[i].preview_url);
        fs.appendFileSync(
          "log.txt",
          "preview url: " + song[i].preview_url + "\n"
        );
        console.log(song[i].album.name);
        fs.appendFileSync("log.txt", "album: " + song[i].album.name + "\n");
      }
    })
    .catch(function(err) {
      console.log(err);
    });
}

function movieQuery(v) {
  //default
  if (v === undefined) {
    v = "Mr. Nobody";
    console.log(
      "If you haven't watched 'Mr. Nobody,' then you should: http://www.imdb.com/title/tt0485947/"
    );
    fs.appendFileSync(
      "log.txt",
      "If you haven't watched 'Mr. Nobody,' then you should: http://www.imdb.com/title/tt0485947/" +
        "\n"
    );
    console.log("It's on Netflix!");
    fs.appendFileSync("log.txt", "It's on Netflix!\n");
  }
  //split everytime there is an empty space
  var dataArr = p.splice([3]).join("+");
  // Then run a request with axios to the OMDB API with the movie specified
  var queryUrl = `http://www.omdbapi.com/?t=${dataArr}&y=&plot=short&apikey=trilogy`;
  // helps debug against actual URL.
  //console.log(queryUrl);
  axios
    .get(queryUrl)
    .then(function(response) {
      let mData = response.data;
      //console.log(mData);
      // for (i = 0; i < mData.length; i++) {
      console.log("Movie Title: " + mData.Title);
      console.log("Release Year: " + mData.Released);
      console.log("IMBD Rating: " + mData.imdbRating);
      console.log("Rotten Tomatoes Rating: " + mData.Ratings[1].Value);
      console.log("Country Produced: " + mData.Country);
      console.log("Language: " + mData.Language);
      console.log("Plot: " + mData.Plot);
      console.log("Actors: " + mData.Actors);
      fs.appendFileSync("log.txt", "Movie Title: " + mData.Title + "\n");
      fs.appendFileSync("log.txt", "Release Year: " + mData.Released + "\n");
      fs.appendFileSync("log.txt", "IMBD Rating: " + mData.imdbRating + "\n");
      fs.appendFileSync(
        "log.txt",
        "Rotten Tomatoes Rating: " + mData.Ratings[1].Value + "\n"
      );
      fs.appendFileSync("log.txt", "Country Produced: " + mData.Country + "\n");
      fs.appendFileSync("log.txt", "Language: " + mData.Language) + "\n";
      fs.appendFileSync("log.txt", "Plot: " + mData.Plot + "\n");
      fs.appendFileSync("log.txt", "Actors: " + mData.Actors + "\n");
      //}
    })
    // Then log the Release Year for the movie

    .catch(function(error) {
      if (error.response) {
        // The request was made and the server responded with a status code
        // that falls out of the range of 2xx
        console.log("---------------Data---------------");
        console.log(error.response.data);
        console.log("---------------Status---------------");
        console.log(error.response.status);
        console.log("---------------Status---------------");
        console.log(error.response.headers);
      } else if (error.request) {
        // The request was made but no response was received
        // `error.request` is an object that comes back with details pertaining to the error that occurred.
        console.log(error.request);
      } else {
        // Something happened in setting up the request that triggered an Error
        console.log("Error", error.message);
      }
      console.log(error.config);
    });
}

function bandQuery(v) {
  let dataArr = v.split(" ").join("+");
  let queryUrl = `https://rest.bandsintown.com/artists/${dataArr}/events?app_id=${
    keys.spotify.bandsintown
  }`;
  //console.log(bandsintown);
  axios.get(queryUrl).then(function(response) {
    //console.log(response.data);
    let fu = response.data[0];
    console.log("Venue: " + fu.venue.name);
    fs.appendFileSync("log.txt", "Venue: " + fu.venue.name + "\n");
    let city = fu.venue.city;
    let region = fu.venue.region;
    let country = fu.venue.country;
    console.log(`Location: ${city}, ${region}, ${country}`);
    fs.appendFileSync("log.txt", `Location: ${city}, ${region}, ${country}\n`);
    console.log(moment(fu.datetime).format("MM/DD/YYYY"));
    let thyme = moment(fu.datetime).format("MM/DD/YYYY");
    fs.appendFileSync("log.txt", `Date: ${thyme}\n`);

  });
}

function makeMe() {
  fs.readFile("random.txt", "utf8", (err, data) => {
    if (err) throw err;
    console.log(data);
    var dataArr = data.split(",");
    input(dataArr[0], dataArr[1]);
  });
}

Approach: 做法:

using a little es6 destructuring. 使用一点es6解构。

run this in the console: node app.js a 5 3 ; 在控制台中运行: node app.js a 5 3 ;

const [a, b, c, d, e, f] = process.argv;

console.log(c);
console.log(d);
console.log(e);
console.log(f);

f should be undefined and c/d/e should all be defined as the 3 params that you passed in. f应该是未定义的,c / d / e应该全部定义为你传入的3个参数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何找到字符串并将其拆分为node.js? - How can I find the string and split it in node.js? 如何在我的node.js Web服务中包含另一个参数? - How can I include another parameter in my node.js web service? 如何在回调 function node.js 中传递参数? - How can i pass parameter in callback function node.js? 我在我的 node.js 代码中收到此错误“无法读取未定义的属性 'split'”。 如何解决这个问题? - I am getting this error “Cannot read property 'split' of undefined” in my node.js code. How to resolve this? 如何在node.js中搜索? - How do i search in node.js? 如何故意使我的node.js服务器崩溃? - How can I purposefully crash my node.js server? 如何使用 node.js 修改我的 HTML 文件? - How can I modify my HTML file with node.js? 如何在Node.js中的循环中为背景设置动画 - How can I animate my background in a loop in node.js 如何在不显示API密钥的情况下使此代码正常工作? 我在Node.js / Angular / Express上构建为应用程序 - How can I make this code work without showing my API keys? I am building as app on Node.js/Angular/Express 我如何使用:作为拆分器并创建2个单独的字符串变量来拆分node.js函数中的querydata - how can i split querydata in node.js function using : as the splitter and creat 2 seprate string variable
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM