Thursday, 27 April 2017

/POST error while accessing the TVDB database

I am using the tvdb database for an project. With my present code, I am unable to fetch any data from the database. When I do a post request, the request never ends unless I manually cancel it. Is it the apikey or the Client not properly constructed. Please help.

app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var TVDB = require('node-tvdb');
var async = require('async');
var _ = require('lodash');

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');

var config = require('./config');

mongoose.connect(config.mongoUrl);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function(){
    //we're connected
    console.log("Connected correctly to the server");
});

var index = require('./routes/index');
var users = require('./routes/users');
var showRouter = require('./routes/showRouter');
var episodeRouter = require('./routes/episodeRouter');

var app = express();   

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());

app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);
app.use('/shows', showRouter);
app.use('/episodes', episodeRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});



module.exports = app;

showRouter.js

var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');

var TVDB = require('node-tvdb');

var Show = require('../models/shows');
var Episode = require('../models/episodes');

var showRouter = express.Router();

showRouter.use(bodyParser.json());

showRouter.route('/')
    .get(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);
        });
    })

.post(function(req, res, next) {
  var apiKey = '5BB799C77561B167';

  var tvdb = new TVDB(apiKey);
  var seriesName = req.body.showName;

  tvdb.getSeriesByName(seriesName, function(err, series){
    if(err) throw err;
    res.send(series.data.series || series.data.series[0]);
  });
});

showRouter.route('/:_id')
    .get(function(req, res, next) {
        Show.findById(req.params._id, function(err, show) {
            if (err) return next(err);
            res.send(show);
        });a
    });

module.exports = showRouter;

shows.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var showSchema = new Schema({
    _id: Number,
    name: String,
    airsDayOfWeek: String,
    airsTime: String,
    firstAired: Date,
    genre: [String],
    network: String,
    overview: String,
    rating: Number,
    ratingCount: Number,
    status: String,
    banner: String,
    subscribers: [{
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'User'
    }],
    episodes: [{
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'Episode'
    }]
});

var Show = mongoose.model('Show', showSchema);
module.exports = Show;



via Manoj Patra

No comments:

Post a Comment