Проект JS Node возвращает '[объект объекта]' вместо отображения твитов из потока - PullRequest
0 голосов
/ 04 мая 2018

Я создаю проект Node JS, который извлекает и отображает твиты на сервере в виде списка. Тем не менее, когда я захожу, чтобы просмотреть веб-страницу после запуска main.js, он возвращает список «[объект объекта]» вместо твитов. Я пытался использовать JSON.stringify, но безрезультатно. Возможно я использую это неправильно?

Я использую Node.js, Express.js и Pug.

main.js

'use strict';

const express = require('express'),
    Twitter = require('twitter'),
    passport = require('passport'),
    TwitterStrategy = require('passport-twitter').Strategy,
    request = require('request'),
    app = express(),
    tweets = [];

const T = new Twitter({
    consumer_key: 'vLHfUa437ECQDnCqbikfpHnxh',
    consumer_secret: 'ygZ6HH19vMwm3hGQnSFGKimaBNClzPZUWKoq4TKXqNnOTZPkP4',
    access_token_key: '898531406703407108-qkmMO2wAyyXjo8XIG2B59dSlWY6OXZQ',
    access_token_secret: 'vBNdwsDeaI8WNQ1gWdtp70keg0EsutgpWNeliD56uj8v6'
});

T.stream('statuses/filter', {track: 'love'}, function(stream){
    stream.on('data', function(data){
        if ('delete' in data === false){
            tweets.push(data);
        }
    });
    setTimeout(function(){
        console.log(tweets.length);
    }, 1000);
});

app.set('view engine', 'pug');
app.set('views', './views');

app.use(express.json());
app.use(express.urlencoded({
    extended: true
}));

app.use(express.static('resources'));
app.get('/', function(req, res) {
    res.setHeader("Content-Type", 'text/html');
    res.render('index', {tweets: tweets});
});

app.listen(3000, function () {
    console.log('Listening on http://localhost:3000');
});

index.pug

doctype
html
    head
        meta(charset="UTF-8")
        meta(name="viewport", content="width=device-width, initial-scale=1")
        block title
            title This is the title!
        link(rel='stylesheet', href='/css/style.css', type='text/css')
    body
        ul
            each tweet in tweets
                li= tweet

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

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

Чтобы отобразить каждый твит индивидуально (что, я полагаю, вы хотите сделать), просто измените следующее:

tweets.push(data);

к этому ...

tweets.push(data.text);

Bam! Теперь вы отображаете фактическую текстовую строку для каждого твита, которая соответствует вашему фильтру.

0 голосов
/ 04 мая 2018

Пока данные помещаются в массив твитов, просто проверьте, являются ли данные элементом или объектом, если объект будет напечатан как [Объект, объект] .

Попробуйте проверить ключи данных, прежде чем помещать их в массив, тогда только вы получите ясное представление.

if ('delete' в данных === false) ---- здесь ясно видно, что данные являются объектом

...