Почему я получаю нулевой или [] ответ из моего файла server.js?

0

Я делаю пример на основе TV showTracker, и до сих пор я не мог получать какие-либо шоу на свой сайт. Я очень старался, допустил ли я ошибку, но я все еще ничего не мог найти. Итак, как получить эту информацию. Я смотрел этот server.js и mongod в отдельных CMD и глотнул в другой CMD. Я все еще не мог получить ни одного из шоу. Когда я увижу ответы, он покажет пустой массив "[]", как это. Итак, какой-нибудь совет? Помощь была бы очень признательна. (У меня есть веб-сайт еще, подумал, что это тоже поможет моему вопросу). Ошибка в чистом отладчике говорит api/shows / - response = []

Вот мой server.jsrespone

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;



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


var userSchema = new mongoose.Schema(
    {
        email: { type: String, unique: true },
        password: String
    });

userSchema.pre('save', function (next) {
    var user = this;
    if (!user.isModified('password')) return next();
    bcrypt.genSalt(10, function (err, salt) {
        if (err) return next(err);
        bcrypt.hash(user.password, salt, function (err, hash) {
            if (err) return next(err);
            user.password = hash;
            next();
        });
    });
});

userSchema.methods.comparePassword = function (candidatePassword, cb) {
    bcrypt.compare(candidatePassword, this.password, function (err, isMatch) {
        if (err) return cb(err);
        cb(null, isMatch);
    });
}

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

mongoose.connect('localhost');

var app = express();

app.set('port', process.env.PORT || 3000);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
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.post('/api/shows', function (req, res, next) {
    var apiKey = 'E36B52F7E036AFF3';
    var seriesName = req.body.showName
    .toLowerCase()
    .replace(/ /g, '_')
    .replace(/[^\w-]+/g, '');
    var parser = xml2js.Parser({
        explicitArray: false,
        normalizeTags: true

    });

    async.waterfall([
        function (callback) {
            request.get('http://thetvdb.com/api/GetSeries.php?seriesname=' + seriesName, function (error, response, body) {
                if (error) return next(error);
                parser.parseString(body, function (err, result) {
                    if (!result.data.series) {
                        return res.send(404, { message: req.body.showName + ' was not found.' });
                    }
                    var seriesId = result.data.series.seriesid || result.data.series[0].seriesid;
                    callback(err, seriesId);
                });
            });
        },
        function (seriesId, callback) {
            request.get('http://thetvdb.com/api' + apiKey + '/series/' + seriesId + '/all/en.xml', function (error, response, body) {
                if (error) return next(error);
                parser.parseString(body, function (err, result) {
                    var series = result.data.series;
                    var episodes = result.data.episode;
                    var show = new Show({
                        _id: series.id,
                        name: series.seriesname,
                        airsDayOfWeek: series.airs_dayofweek,
                        airsTime: series.airs_time,
                        firstAired: series.firstaired,
                        genre: series.genre.split('|').filter(Boolean),
                        network: series.network,
                        overview: series.overview,
                        rating: series.rating,
                        ratingCount: series.ratingcount,
                        runtime: series.runtime,
                        status: series.status,
                        poster: series.poster,
                        episodes: []
                    });
                    _.each(episodes, function (episode) {
                        show.episodes.push({
                            season: episode.seasonnumber,
                            episodeNumber: episode.episodenumber,
                            episodeName: episode.episodename,
                            firstAired: episode.firstaired,
                            overview: episode.overview
                        });
                    });
                    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);

            }
            res.send(200);
        });
    });
});

function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) next();
    else res.send(401);
};

app.use(function (req, res, next) {
    if (req.user) {
        res.cookie('user', JSON.stringify(req.user));
    }
    next();
});



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 });
});
  • 5
    Шаг 1: уменьшите ваш код до минимального, полного и проверяемого примера . Процесс этого является основной подготовкой при задании подобных вопросов и обычно позволяет вам обнаружить, что не так в процессе, поэтому вам даже не придется задавать свой вопрос. И затем, в случае, если вы не нашли проблему, у вас есть гораздо лучший, меньший, точный кусок кода, чтобы задавать вопросы.
  • 1
    @Mike'Pomax'Kamermans Mike'Pomax'Kamermans Я обвиняю пост в блоге, с которым он связан, поскольку в основном он создает весь список в одном файле. Но на основании предыдущего вопроса от OP и отсутствия подробностей и объяснений в исходном посте, что данных вообще нет, или, по крайней мере, они не находятся в той же коллекции или базе данных, к которой этот код пытается подключиться.
Показать ещё 5 комментариев

2 ответа

0
Лучший ответ

Изменить var query = Show.find(); в /api/показывает

var query  = Show.find(function(err, showdata){
    // all the checking and the res.send(shows) goes here
})

Просто подождите данные и выполните все операции (асинхронные)

  • 0
    Это все еще не сработало. То же самое, даже с одной ошибкой.
  • 0
    Я думаю, что проблема в коде, подобном сказанному в Blakes Seven. Даже если вы это сделаете, вы все равно не сможете найти способ его подключения.
0

ОК, ребята, я наконец нашел ответ на вопрос. В скрипте (server.js) нет ничего плохого. Это потому, что я думаю, что он не может хранить данные в базе данных ('localhost:27017/test'). Вот почему, возможно, я получаю нулевой ответ от TVDB API. Как только я изменил свою базу данных и подключил строки к (

'mongodb://nixsiow:[email protected]:27479/nixshowtrackrapp', он работал как шарм.

Поэтому, возможно, мой ответ может не объяснить это правильно, или вы можете найти более подробную информацию о переполнении стека. Спасибо за помощь, ребята! Я надеюсь, что это поможет тем, кто попытается сделать этот учебник, и застрять на этом шаге.

Итак, окончательный ответ:

mongoose.connect('mongodb://nixsiow:[email protected]:27479/nixshowtrackrapp');

var agenda = require('agenda')({ db: { address: 'mongodb://nixsiow:[email protected]:27479/nixshowtrackrapp'  } }); 

Кроме того, у сайта Nixsow может быть помощь, это последнее обновление, которое я нашел для этого урока.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню