node.js - 将 Facebook 登录和地理位置数据插入 MongoDB

标签 node.js mongodb facebook geolocation database

我目前正在开发一个项目,其中用户使用 Facebook 登录,看到一张标有其精确位置的 map ,然后可以看到也登录到 map 上的 friend (以及距离)。

下一步是将这些数据存储在数据库中。

由于我对使用 MongoDB 相当陌生,因此我想要一些有关如何获取 Facebook 登录/地理位置数据并将其插入数据库的指导。我很乐意从命令行手动将 BSON 对象输入数据库,但我似乎无法在代码中找到执行此操作的最佳方法。

代码如下 - 对于获取发布数据并将其放入 MongoDB 数据库的第一步提供一些指导确实很有帮助。谢谢!

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 MongoClient = require('mongodb').MongoClient;
var assert = require('assert');

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
});

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("combined"));
  app.use(cookieParser());
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({
    extended: true
  }));
  app.use(methodOverride());
  app.use(session({
      secret: "keyboard cat",
      saveUninitialized: true, // (default: true)
      resave: true, // (default: true)
    }));
  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');
});


// Socket markers start

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);
    });

    // socket.on('show-marker', )
    socket.on('show-user-location', function(data) {
      socket.broadcast.emit('show-user-location', data);
    });

});

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

// socket markers end

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

module.exports = server;

最佳答案

您能否将其删除,以便在将其连接到 facebook 并在其中设置套接字之前只插入一些静态数据。每一个额外的代码都会妨碍了解您尝试的更改是否真正达到您想要的效果。

关于在 mongodb 中以编程方式插入数据的最佳方法,我相信这是文档的相关部分:

http://docs.mongodb.org/manual/core/write-operations-introduction/

db.users.insert(
  {
    name: "sue",
    age: 26,
    status: "A"
  }
)

关于node.js - 将 Facebook 登录和地理位置数据插入 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30424591/

相关文章:

node.js - 如何链接两个docker容器?

node.js - 如何(正确)在 Node 中链接多个连续的 MSSQL 查询

c++ - 插入后缺少 MongoDB 记录

ruby-on-rails - 如何从我的网站在 Facebook 上发布新闻源

facebook - 我可以更改测试用户的权限吗?

javascript - react redux 更新状态 onClick 函数与多个 Action

javascript - Node.js 中父/子进程之间的顺序通信

python - 如何在python中启动mongodb守护进程

mongodb - 操作系统类型“Linux”不支持每个处理程序多个 VMExtension

Facebook API——在墙上的帖子中嵌入一个视频,该帖子还有另一个链接