Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express应用程序中的API调用_Javascript_Node.js_Mongodb_Express_Last.fm - Fatal编程技术网

Javascript Express应用程序中的API调用

Javascript Express应用程序中的API调用,javascript,node.js,mongodb,express,last.fm,Javascript,Node.js,Mongodb,Express,Last.fm,我正在关注这一点。我想复制相同的,但我想用Last.fm API代替TVDB。所以我将server.js代码从改为包含方法 但每当我添加任何相册名称时,我都会得到TypeError:无法读取未定义的属性“results” at/home/karan/work/showapp/server.js:94:22 我还更改了数据库模式。我不明白是什么引起了这个问题。API调用是否构造不正确 不要添加3页代码。仅包括相关部分。错误指向前的最后一个值。结果,因为未定义的值不能有属性。因此,无论是result

我正在关注这一点。我想复制相同的,但我想用Last.fm API代替TVDB。所以我将server.js代码从改为包含方法

但每当我添加任何相册名称时,我都会得到TypeError:无法读取未定义的属性“results” at/home/karan/work/showapp/server.js:94:22
我还更改了数据库模式。我不明白是什么引起了这个问题。API调用是否构造不正确

不要添加3页代码。仅包括相关部分。错误指向
前的最后一个值。结果
,因为
未定义的
值不能有属性。因此,无论是
result
(对于
result.results
)还是
result.Request
(对于
result.Request.results
)都是
未定义的。考虑到API中有多少结果看起来是小写的,最好的猜测是
result.Request
应该是
result.Request
。不过,您还应该检查
err
s.error这里也有->
request.get('http://www.goodreads.com/book/show/50?format=xml&key=“+apiKey+函数(错误、响应、正文)
。您正在将函数连接到请求url上
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
var async = require('async');
var request = require('request');
var xml2js = require('xml2js');
var _ = require('lodash');

var showSchema = new mongoose.Schema({
  _id: Number,
  name: String,
});

var userSchema = new mongoose.Schema({
  name: { type: String, trim: true, required: true },
  email: { type: String, unique: true, lowercase: true, trim: true },
  password: String,
  facebook: {
    id: String,
    email: String
  },
  google: {
    id: String,
    email: String
  }
});


var User = mongoose.model('User', userSchema);
var Show = mongoose.model('Show', showSchema);

mongoose.connect('mongodb://sahat:foobar@ds041178.mongolab.com:41178/showtrackrdemo');
var app = express();

app.set('port', process.env.PORT || 3000);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));
});

app.get('/api/shows', function(req, res, next) {
  var query = Show.find();
  if (req.query.genre) {
    query.where({ genre: req.query.genre });
  } else if (req.query.alphabet) {
    query.where({ name: new RegExp('^' + '[' + req.query.alphabet + ']', 'i') });
  } else {
    query.limit(12);
  }
  query.exec(function(err, shows) {
    if (err) return next(err);
    res.send(shows);
  });
});



app.get('/api/shows/:id', function(req, res, next) {
  Show.findById(req.params.id, function(err, show) {
    if (err) return next(err);
    res.send(show);
  });
});
app.get('*', function(req, res) {
  res.redirect('/#' + req.originalUrl);
});
app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.send(500, { message: err.message });
});

app.post('/api/shows', function (req, res, next) {
  var seriesName = req.body.showName;
  var apiKey = ' 7b3e1e72b5e06503e298ce018c407cc5';
  var parser = xml2js.Parser({
    explicitArray: false,
    normalizeTags: true
  });
//http://ws.audioscrobbler.com/2.0/?method=album.search&album=believe&api_key=7b3e1e72b5e06503e298ce018c407cc5&format=json
  async.waterfall([
    function (callback) {
      request.get('http://ws.audioscrobbler.com/2.0/?method=album.search&album='+ seriesName+'&api_key='+apiKey+'&format=json', function (error, response, body) {
        if (error) return next(error);
        parser.parseString(body, function (err, result) {
          if (!result.results.albummatches.album.name) {
            return res.send(400, { message: req.body.showName + ' was not found.' });
          }
          var seriesId = result.results.albummatches.album.id;
          callback(err, seriesId);
        });
      });
    },
    //http://ws.audioscrobbler.com/2.0/?method=album.search&album=
    function (seriesId, callback) {
      request.get('http://www.goodreads.com/book/show/50?format=xml&key=' + apiKey + function (error, response, body) {
        if (error) return next(error);
        parser.parseString(body, function (err, result) {
          var series = result.Request.results.work[0];
          var show = new Show({
            _id: result.results.albummatches.album.id,
            name:result.results.albummatches.album.name
          });
          callback(err, show);
        });
      });
    },
    function (show, callback) {
      var url = 'http://thetvdb.com/banners/' + show.poster;
      request({ url: url, encoding: null }, function (error, response, body) {
        show.poster = 'data:' + response.headers['content-type'] + ';base64,' + body.toString('base64');
        callback(error, show);
      });
    }
  ], function (err, show) {
    if (err) return next(err);
    show.save(function (err) {
      if (err) {
        if (err.code == 11000) {
          return res.send(409, { message: show.name + ' already exists.' });
        }
        return next(err);
      }
      var alertDate = Date.create('Next ' + show.airsDayOfWeek + ' at ' + show.airsTime).rewind({ hour: 2});
      agenda.schedule(alertDate, 'send email alert', show.name).repeatEvery('1 week');
      res.send(200);
    });
  });
});