【问题标题】:Node JS project returns '[object Object]' instead of displaying tweets from streamNode JS 项目返回“[object Object]”而不是显示来自流的推文
【发布时间】:2018-10-15 05:40:56
【问题描述】:

我正在创建一个 Node JS 项目,它以列表的形式在服务器上获取和显示推文。但是,当我在运行 main.js 后查看网页时,它会返回一个“[object Object]”列表而不是推文。我曾尝试使用 JSON.stringify 但无济于事。可能是我用错了?

我正在使用 Node.js、Express.js 和 Pug。

ma​​in.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

【问题讨论】:

    标签: node.js express pug


    【解决方案1】:

    正如 Piyush 指出的那样,您正在处理一个对象,并且需要在拉出字符串之前进一步挖掘该对象。

    要单独显示每条推文(我假设您希望这样做),只需更改以下内容:

    tweets.push(data);
    

    到这个...

    tweets.push(data.text);
    

    砰!现在,您将显示与您的过滤器匹配的每条推文的实际文本字符串。

    【讨论】:

      【解决方案2】:

      当将数据推送到 tweets 数组时,只需检查数据是项目还是 Object ,如果是 Object 则它将打印为 [Object,Object]

      在推入数组之前尝试检查数据的键只有你才会明白。

      if ('delete' in data === false) ----这里清楚地表明data是一个对象

      【讨论】:

        猜你喜欢
        • 2016-03-19
        • 2018-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        相关资源
        最近更新 更多