質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

2543閲覧

routes/indexでのsocket.io

Run_ner

総合スコア16

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

1グッド

0クリップ

投稿2016/03/11 07:45

編集2016/03/11 07:48

node.js(Express)でTwitter認証したらtwitterのstreamingを開始し、リアルタイムでページに表示するコードを書こうとしたのですが、何故か動きません。

Node.jsの経験がまだ2日程度なのでコードはぐちゃぐちゃで申し訳ないのですが、以下に載せさせて頂きます。

(起動はbin/www)

app.js

lang

1 2var TWITTER_CONSUMER_KEY = "xxxx"; 3var TWITTER_CONSUMER_SECRET = "xxxx"; 4 5var express = require("express"); 6var path = require("path"); 7var logger = require("morgan"); 8var cookieParser = require("cookie-parser"); 9var bodyParser = require("body-parser"); 10 11var app = express(); 12 13var session = require("express-session"); 14 15 16 17var passport = require("passport"); 18var TwitterStrategy = require("passport-twitter").Strategy; 19var TWITTER_CALLBACK_URL = "http://127.0.0.1:3000/oauth/callback/"; 20 21app.set("consumerkey",TWITTER_CONSUMER_KEY); 22app.set("consumerSecret",TWITTER_CONSUMER_SECRET); 23 24app.set("passport", passport); 25 26passport.serializeUser(function(user, done) { 27 done(null, user); 28}); 29 30passport.deserializeUser(function(obj, done) { 31 done(null, obj); 32}); 33 34passport.use(new TwitterStrategy({ 35 consumerKey: TWITTER_CONSUMER_KEY, 36 consumerSecret: TWITTER_CONSUMER_SECRET, 37 callbackURL: TWITTER_CALLBACK_URL 38 }, 39 function(token, tokenSecret, profile, done) { 40 app.set("token", token); 41 app.set("tokenSecret", tokenSecret); 42 console.log(token); 43 process.nextTick(function() { 44 return done(null, profile); 45 }); 46 } 47)); 48 49 50app.set("views", path.join(__dirname, "views")); 51app.set("view engine", "ejs"); 52 53app.use(logger("dev")); 54app.use(bodyParser.json()); 55app.use(bodyParser.urlencoded()); 56app.use(cookieParser()); 57app.use(express.static(path.join(__dirname, "public"))); 58app.use(express.static(__dirname + '/public')); 59 60 61app.use(session({ 62 secret: "SECRET" 63})); 64 65app.use(passport.initialize()); 66app.use(passport.session()); 67 68 69module.exports = app; 70 71 72var routes = require("./routes/"); 73 74

routes/index.js

lang

1var app = module.parent.exports; 2var http = require('http'); 3var passport = app.get("passport"); 4var twitter = require('ntwitter'); 5var io = require('socket.io'); 6 7app.get('/', function(req, res) { 8 res.render('index', { 9 title: 'streaming' 10 }); 11}); 12 13 14app.get("/oauth", passport.authenticate("twitter")); 15 16 17app.get("/oauth/callback", 18 passport.authenticate("twitter", { 19 successRedirect: "/streaming", 20 failureRedirect: "/" 21 })); 22app.get("/streaming", function(req,res){ 23 var tw = new twitter({ 24 consumer_key: app.get("consumerkey"), 25 consumer_secret: app.get("consumerSecret"), 26 access_token_key: app.get("token"), 27 access_token_secret: app.get("tokenSecret") 28 }); 29 30io.sockets.on("connection", function(socket) { 31 console.log("hello"); 32 tw.stream('statuses/sample', function(stream) { 33 stream.on("data", function(data) { 34 socket.emit("stream", data); 35 console.log(data.text); 36 }); 37 38 stream.on("end", function(res) { 39 console.log(res); 40 }); 41 42 stream.on("destroy", function(res) { 43 console.log(res); 44 }); 45 46 }); 47 }); 48 49 res.render("streaming",{title: "streaming"}); 50}); 51 52 53// ログアウト 54app.get("/logout", function(req, res) { 55 req.logout(); 56 res.redirect("/"); 57}); 58// -------------------------------------------------------- 59 60 61 62app.use(function(req, res, next) { 63 var err = new Error("Not Found"); 64 err.status = 404; 65 next(err); 66}); 67 68 69if(app.get("env") === "development") { 70 app.use(function(err, req, res, next) { 71 res.status(err.status || 500); 72 res.render("error", { 73 message: err.message, 74 error: err 75 }); 76 }); 77} 78 79 80app.use(function(err, req, res, next) { 81 res.status(err.status || 500); 82 res.render("error", { 83 message: err.message, 84 error: {} 85 }); 86});

bin/www

lang

1#!/usr/bin/env node 2 3/** 4 * Module dependencies. 5 */ 6 7var app = require('../app'); 8var debug = require('debug')('twi-streaming:server'); 9var http = require('http'); 10 11/** 12 * Get port from environment and store in Express. 13 */ 14 15var port = normalizePort(process.env.PORT || '3000'); 16app.set('port', port); 17 18/** 19 * Create HTTP server. 20 */ 21 22var server = http.createServer(app); 23 24/** 25 * Listen on provided port, on all network interfaces. 26 */ 27 28var io = require('socket.io').listen(server); 29app.set("server",server); 30server.listen(port); 31server.on('error', onError); 32server.on('listening', onListening); 33 34/** 35 * Normalize a port into a number, string, or false. 36 */ 37 38function normalizePort(val) { 39 var port = parseInt(val, 10); 40 41 if (isNaN(port)) { 42 // named pipe 43 return val; 44 } 45 46 if (port >= 0) { 47 // port number 48 return port; 49 } 50 51 return false; 52} 53 54/** 55 * Event listener for HTTP server "error" event. 56 */ 57 58function onError(error) { 59 if (error.syscall !== 'listen') { 60 throw error; 61 } 62 63 var bind = typeof port === 'string' 64 ? 'Pipe ' + port 65 : 'Port ' + port; 66 67 // handle specific listen errors with friendly messages 68 switch (error.code) { 69 case 'EACCES': 70 console.error(bind + ' requires elevated privileges'); 71 process.exit(1); 72 break; 73 case 'EADDRINUSE': 74 console.error(bind + ' is already in use'); 75 process.exit(1); 76 break; 77 default: 78 throw error; 79 } 80} 81 82/** 83 * Event listener for HTTP server "listening" event. 84 */ 85 86function onListening() { 87 var addr = server.address(); 88 var bind = typeof addr === 'string' 89 ? 'pipe ' + addr 90 : 'port ' + addr.port; 91 debug('Listening on ' + bind); 92} 93

view/streaming

lang

1<html> 2<head> 3 <link rel='stylesheet' href='/stylesheets/style.css' /> 4<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 5<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script> 6<script src="/socket.io/socket.io.js"></script> 7<script> 8console.log("Hello,test page!!"); 9 var socket = io.connect(); 10 socket.on('streaming', function (data) { 11 $(".TwitterList").append($("<li>").text(data.text)); 12 }); 13</script> 14</head> 15<body> 16 <ul class="TwitterList"> 17 </ul> 18</body> 19</html>

いろんなサイトから得た情報を繋ぎ合わせただけなので無駄な部分もあるかと思いますが、どうか回答お願いします。
また、もっと効率が良い書き方があればご教授頂けると幸いです。

passportとntwitterを使用しています。

ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

routes/indexのコードをapp.jsに全て移したら解決しました

投稿2016/03/11 14:46

Run_ner

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問