Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过谷歌地图显示facebook信息_Javascript_Node.js_Facebook_Google Maps_Facebook Graph Api - Fatal编程技术网

Javascript 通过谷歌地图显示facebook信息

Javascript 通过谷歌地图显示facebook信息,javascript,node.js,facebook,google-maps,facebook-graph-api,Javascript,Node.js,Facebook,Google Maps,Facebook Graph Api,好的,我正在尝试创建一个web应用程序,同时使用GMAP和fb好友列表。第一步是能够在谷歌地图上显示当前位置,这将显示登录者的姓名和照片。我现在有它,如果你登录facebook,你只能查看地图,但除此之外,我无法让2互动 我的maps.js文件如下所示: "use strict"; var map; var markers = [] function initialize() { var mapOptions = { zoom: 16 }; map = new google

好的,我正在尝试创建一个web应用程序,同时使用GMAP和fb好友列表。第一步是能够在谷歌地图上显示当前位置,这将显示登录者的姓名和照片。我现在有它,如果你登录facebook,你只能查看地图,但除此之外,我无法让2互动

我的maps.js文件如下所示:

"use strict";
var map;
var markers = []

function initialize() {
  var mapOptions = {
    zoom: 16
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

  google.maps.event.addDomListener(window, 'load', initialize);
  google.maps.event.addDomListener(window, "resize", function() {
   var center = map.getCenter();
   google.maps.event.trigger(map, "resize");
   map.setCenter(center); 
  });

  // Try HTML5 geolocation
  if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);


      socket.emit('marker', {
        lat: position.coords.latitude,
        lng: position.coords.longitude
      });

      var infowindow = new google.maps.InfoWindow({
        content: '<%= user.displayName %>'
      });

      var markerPos = new google.maps.Marker({
        map: map,
        position: pos,
        title: '<%= user.displayName %>'
      });

      google.maps.event.addListener(markerPos, 'click', function() {
        infowindow.open(map,markerPos);
      });

      map.setCenter(pos);
    }, function() {
      handleNoGeolocation(true);
    });
  } else {
    // Browser doesn't support Geolocation
    handleNoGeolocation(false);
  }
}

function handleNoGeolocation(errorFlag) {
  if (errorFlag) {
    var content = 'Error: The Geolocation service failed.';
  } else {
    var content = 'Error: Your browser doesn\'t support geolocation.';
  }

  var options = {
    map: map,
    position: new google.maps.LatLng(60, 105),
    content: content
  };

  var infowindow = new google.maps.InfoWindow(options);
  map.setCenter(options.position);
}

google.maps.event.addDomListener(window, 'load', initialize);

// Add a marker to the map 
function addMarker(location, text) {
    text = text || '';

    var marker = new google.maps.Marker({
        position: location,
        map: map
    });

    var infowindow = new google.maps.InfoWindow();

    google.maps.event.addListener(marker, 'click', function() {
      infowindow.setContent(text); 
      infowindow.open(map,marker);
    });

    return marker;
}
var express = require('express')
var passport = require('passport')
var util = require('util')
var FacebookStrategy = require('passport-facebook').Strategy
var logger = require('morgan')
var session = require('express-session')
var sessionStore = require('sessionstore');
var bodyParser = require("body-parser")
var cookieParser = require("cookie-parser")
var methodOverride = require('method-override');
var port = process.env.PORT || 3000
var io = require('socket.io')(http);
var http = require('http').Server(app);
var markers = [];
var server = require('http').createServer(app);
var passportStrategy = require('../utils/passport-strategy');

var FACEBOOK_APP_ID = "";
var FACEBOOK_APP_SECRET = "";

passport.use(passportStrategy.facebook);

passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(obj, done) {
  done(null, obj);
});

var sessionData = session({
  store: sessionStore.createSessionStore(),
  secret: "your_secret",
  cookie: { maxAge: 2628000000 },
  resave: true,
  saveUninitialized: true
});

io.use(function(socket, next){
  sessionData(socket.request, socket.request.res, next);
});

passport.use(new FacebookStrategy({
    clientID: FACEBOOK_APP_ID,
    clientSecret: FACEBOOK_APP_SECRET,
    callbackURL: "http://localhost:3000/auth/facebook/callback"
  },
  function(accessToken, refreshToken, profile, done) {

    process.nextTick(function () {

      return done(null, profile);
    });
  }
));




var app = express();

  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(sessionData);
  app.use(logger());
  app.use(cookieParser());
  app.use(bodyParser());
  app.use(methodOverride());
  app.use(session({ secret: 'keyboard cat' }));

  app.use(passport.initialize());
  app.use(passport.session());
  app.use(express.static(__dirname + '/public'));


app.get('/', function(req, res){
  res.render('index', { user: req.user });
});

app.get('/account', ensureAuthenticated, function(req, res){
  res.render('account', { user: req.user });
});

app.get('/login', function(req, res){
  res.render('login', { user: req.user });
});


app.get('/auth/facebook',
  passport.authenticate('facebook'),
  function(req, res){
  });


app.get('/auth/facebook/callback', 
  passport.authenticate('facebook', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });

app.get('/logout', function(req, res){
  req.logout();
  res.redirect('/');
});

app.get('/mapjs', function(req, res){
  res.sendFile(__dirname + '/public/map.js', { user: req.user });
});

io.on('connection', function(socket){
    console.log('a user connected');

    socket.on('marker', function(data) {
      data.socketId = socket.id;

      markers[socket.id] = data;


  console.log('marker latitude: ' + data.lat + ', marker longitude:' + data.lng);
    socket.broadcast.emit('show-marker', data);
    });

});

app.listen(port, function(){
  console.log('five minute catch up is on port 3000');
});

function ensureAuthenticated(req, res, next) {
  if (req.isAuthenticated()) { return next(); }
  res.redirect('/login')
}

module.exports = server;
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Five Minute Catchup</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width">
    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="app/styles/main.css">
<!--    Internal map style (cant remove)-->
      <style type="text/css">
      html, body, #map-canvas { height: 90%; margin: 0; padding: 0;}
    </style>
<!--   Public API  -->
     <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
  </head>

  <body>



  <% if(!user) { %>
  <div class="header">
        <div class="navbar navbar-default" role="navigation">
          <div class="container">
            <div class="navbar-header">



              <a class="navbar-brand" href="#/">Five Minute Catchup</a>
            </div>

            <div class="collapse navbar-collapse" id="js-navbar-collapse">

              <ul class="nav navbar-nav">
                <li ><a href="#/">Home</a></li>
                <li><a href="/account">Account</a></li>
                <a href="/auth/facebook"><img src="login-with-facebook.png" width="154" height="22"></a>

              </ul>
            </div>
          </div>
        </div>
      </div>

      <h2>Welcome! Please log in.</h2>

      <% } else { %>

        <div class="header">
        <div class="navbar navbar-default" role="navigation">
          <div class="container">
            <div class="navbar-header">

              <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#js-navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>

              <a class="navbar-brand" href="#/">Five Minute Catchup</a>
            </div>

            <div class="collapse navbar-collapse" id="js-navbar-collapse">

              <ul class="nav navbar-nav">
                <li ><a href="#/">Home</a></li>
                <li><a href="/account">Account</a></li>
                <li><a href="/logout">Logout</a></li>
              </ul>
            </div>
          </div>
        </div>
      </div>

        <h2>Hello, <%= user.displayName %></h2>
    <div id="map-canvas"></div>
      <% } %>




    <div class="footer">
      <div class="container">
        <p><span class="glyphicon glyphicon-heart"></span> from the Five Minute Catchup team</p>
      </div>
    </div>






        // <!-- <script src="public/map.js"></script> -->

        <!-- socket scripts -->
        <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
      <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
      <script src="/mapjs"></script>
      <script>
        var socket = io();
        //Listen for other users markers
        socket.on('show-marker', function(data) {
          console.log(data);
          var loc = new google.maps.LatLng(data.lat,
                                         data.lng);
          addMarker(loc, data.socketId);
        });
      </script>
</body>
</html>
index.ejs如下所示:

"use strict";
var map;
var markers = []

function initialize() {
  var mapOptions = {
    zoom: 16
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

  google.maps.event.addDomListener(window, 'load', initialize);
  google.maps.event.addDomListener(window, "resize", function() {
   var center = map.getCenter();
   google.maps.event.trigger(map, "resize");
   map.setCenter(center); 
  });

  // Try HTML5 geolocation
  if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);


      socket.emit('marker', {
        lat: position.coords.latitude,
        lng: position.coords.longitude
      });

      var infowindow = new google.maps.InfoWindow({
        content: '<%= user.displayName %>'
      });

      var markerPos = new google.maps.Marker({
        map: map,
        position: pos,
        title: '<%= user.displayName %>'
      });

      google.maps.event.addListener(markerPos, 'click', function() {
        infowindow.open(map,markerPos);
      });

      map.setCenter(pos);
    }, function() {
      handleNoGeolocation(true);
    });
  } else {
    // Browser doesn't support Geolocation
    handleNoGeolocation(false);
  }
}

function handleNoGeolocation(errorFlag) {
  if (errorFlag) {
    var content = 'Error: The Geolocation service failed.';
  } else {
    var content = 'Error: Your browser doesn\'t support geolocation.';
  }

  var options = {
    map: map,
    position: new google.maps.LatLng(60, 105),
    content: content
  };

  var infowindow = new google.maps.InfoWindow(options);
  map.setCenter(options.position);
}

google.maps.event.addDomListener(window, 'load', initialize);

// Add a marker to the map 
function addMarker(location, text) {
    text = text || '';

    var marker = new google.maps.Marker({
        position: location,
        map: map
    });

    var infowindow = new google.maps.InfoWindow();

    google.maps.event.addListener(marker, 'click', function() {
      infowindow.setContent(text); 
      infowindow.open(map,marker);
    });

    return marker;
}
var express = require('express')
var passport = require('passport')
var util = require('util')
var FacebookStrategy = require('passport-facebook').Strategy
var logger = require('morgan')
var session = require('express-session')
var sessionStore = require('sessionstore');
var bodyParser = require("body-parser")
var cookieParser = require("cookie-parser")
var methodOverride = require('method-override');
var port = process.env.PORT || 3000
var io = require('socket.io')(http);
var http = require('http').Server(app);
var markers = [];
var server = require('http').createServer(app);
var passportStrategy = require('../utils/passport-strategy');

var FACEBOOK_APP_ID = "";
var FACEBOOK_APP_SECRET = "";

passport.use(passportStrategy.facebook);

passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(obj, done) {
  done(null, obj);
});

var sessionData = session({
  store: sessionStore.createSessionStore(),
  secret: "your_secret",
  cookie: { maxAge: 2628000000 },
  resave: true,
  saveUninitialized: true
});

io.use(function(socket, next){
  sessionData(socket.request, socket.request.res, next);
});

passport.use(new FacebookStrategy({
    clientID: FACEBOOK_APP_ID,
    clientSecret: FACEBOOK_APP_SECRET,
    callbackURL: "http://localhost:3000/auth/facebook/callback"
  },
  function(accessToken, refreshToken, profile, done) {

    process.nextTick(function () {

      return done(null, profile);
    });
  }
));




var app = express();

  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(sessionData);
  app.use(logger());
  app.use(cookieParser());
  app.use(bodyParser());
  app.use(methodOverride());
  app.use(session({ secret: 'keyboard cat' }));

  app.use(passport.initialize());
  app.use(passport.session());
  app.use(express.static(__dirname + '/public'));


app.get('/', function(req, res){
  res.render('index', { user: req.user });
});

app.get('/account', ensureAuthenticated, function(req, res){
  res.render('account', { user: req.user });
});

app.get('/login', function(req, res){
  res.render('login', { user: req.user });
});


app.get('/auth/facebook',
  passport.authenticate('facebook'),
  function(req, res){
  });


app.get('/auth/facebook/callback', 
  passport.authenticate('facebook', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });

app.get('/logout', function(req, res){
  req.logout();
  res.redirect('/');
});

app.get('/mapjs', function(req, res){
  res.sendFile(__dirname + '/public/map.js', { user: req.user });
});

io.on('connection', function(socket){
    console.log('a user connected');

    socket.on('marker', function(data) {
      data.socketId = socket.id;

      markers[socket.id] = data;


  console.log('marker latitude: ' + data.lat + ', marker longitude:' + data.lng);
    socket.broadcast.emit('show-marker', data);
    });

});

app.listen(port, function(){
  console.log('five minute catch up is on port 3000');
});

function ensureAuthenticated(req, res, next) {
  if (req.isAuthenticated()) { return next(); }
  res.redirect('/login')
}

module.exports = server;
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Five Minute Catchup</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width">
    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="app/styles/main.css">
<!--    Internal map style (cant remove)-->
      <style type="text/css">
      html, body, #map-canvas { height: 90%; margin: 0; padding: 0;}
    </style>
<!--   Public API  -->
     <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
  </head>

  <body>



  <% if(!user) { %>
  <div class="header">
        <div class="navbar navbar-default" role="navigation">
          <div class="container">
            <div class="navbar-header">



              <a class="navbar-brand" href="#/">Five Minute Catchup</a>
            </div>

            <div class="collapse navbar-collapse" id="js-navbar-collapse">

              <ul class="nav navbar-nav">
                <li ><a href="#/">Home</a></li>
                <li><a href="/account">Account</a></li>
                <a href="/auth/facebook"><img src="login-with-facebook.png" width="154" height="22"></a>

              </ul>
            </div>
          </div>
        </div>
      </div>

      <h2>Welcome! Please log in.</h2>

      <% } else { %>

        <div class="header">
        <div class="navbar navbar-default" role="navigation">
          <div class="container">
            <div class="navbar-header">

              <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#js-navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>

              <a class="navbar-brand" href="#/">Five Minute Catchup</a>
            </div>

            <div class="collapse navbar-collapse" id="js-navbar-collapse">

              <ul class="nav navbar-nav">
                <li ><a href="#/">Home</a></li>
                <li><a href="/account">Account</a></li>
                <li><a href="/logout">Logout</a></li>
              </ul>
            </div>
          </div>
        </div>
      </div>

        <h2>Hello, <%= user.displayName %></h2>
    <div id="map-canvas"></div>
      <% } %>




    <div class="footer">
      <div class="container">
        <p><span class="glyphicon glyphicon-heart"></span> from the Five Minute Catchup team</p>
      </div>
    </div>






        // <!-- <script src="public/map.js"></script> -->

        <!-- socket scripts -->
        <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
      <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
      <script src="/mapjs"></script>
      <script>
        var socket = io();
        //Listen for other users markers
        socket.on('show-marker', function(data) {
          console.log(data);
          var loc = new google.maps.LatLng(data.lat,
                                         data.lng);
          addMarker(loc, data.socketId);
        });
      </script>
</body>
</html>

五分钟迎战
html,正文,#映射画布{高度:90%;边距:0;填充:0;}
欢迎请登录。 切换导航
你好 来自五分钟的追赶队

// var socket=io(); //侦听其他用户标记 socket.on('show-marker',函数(数据){ 控制台日志(数据); var loc=new google.maps.LatLng(data.lat, 数据(液化天然气); addMarker(loc,data.socketId); });
很抱歉不得不复制和粘贴整个文件,我不想错过一些可能相关的代码

在谷歌地图信息窗口内获取fb名称和图像url的任何帮助都将不胜感激


谢谢大家!

您需要创建定制者,并创建一个调用facebook详细信息的函数。 在JSFIDLE上查看此演示

var数据=[{
档案图像:“http://www.gravatar.com/avatar/d735414fa8687e8874783702f6c96fa6?
s=90&d=identicon&r=PG”

对于(var i=0;ibut)如何使信息窗口显示为user.name?