2017-06-26 2 views
0

Ich habe eine MongoDB auf einem Webserver und ich habe eine Mean-Stack-Web-Anwendung. Innerhalb der MongoDB habe ich eine Menge Daten, die ich an meine Webanwendung weitergeben möchte. Ich habe mir Optionen angeschaut, aber ich bin ein wenig unsicher, welche Route ich wählen muss, um dies zu erreichen. Ich habe überlegt, mithilfe von socket.io einen Listener auf meinem Webserver einzurichten, um eine Verbindung mit meiner DB zu öffnen, und dann einen API-Aufruf oder eine direkte DB-Verbindung herzustellen, um meine Daten zurückzugeben.Weitergabe von Daten von mongodb an meine Front-End-Anwendung

Ich sollte hinzufügen, dass meine App auf dem mean.io Standardcode basiert.

Meine Frage ist wo in meinem Stack muss ich den Socket.io-Code setzen?

Wäre es sinnvoll, den socket.io-Code im Stammverzeichnis meiner Anwendung oder nur in den Paketen/Modulen einzufügen, für die die Daten von meinem Webserver an meine Anwendung übergeben werden müssen?

Und schließlich, ist socket.io sogar die bevorzugte Route zu nehmen? Gibt es eine andere Methode, um dies zu erreichen, die mehr Sinn macht, wie express.js?

Antwort

1

Es ist nicht notwendig, socket.io zu verwenden, es sei denn, Sie wollen in Echtzeit konstantes, persistentes Streaming von Informationen aus Ihrer Datenbank zu Ihrem Front-End.

Zuerst in Ihrer Express-App, verbinden Sie sich mit der db mit https://github.com/mongodb/node-mongodb-native. Dann können Sie einfach eine JSON-Endpunktroute für die zu versendenden Daten einrichten. Dann sendet die Client-Webseite, die die Daten benötigt, einfach eine XHR-Anfrage an die JSON-Seite.

EDIT: OP möchte socket.io verwenden.

Wenn Sie socket.io verwenden möchten, müssen Sie es sowohl auf dem Server als auch auf dem Client einschließen.

Server-Seite:

const express = require('express'); 
const app = express(); 
const server = require('http').Server(app); 
// socket.io 
const io = require('socket.io').listen(server); 
// handling socket.io requests 
io.on('connection', (socket) => { 
    log.info('new connection.'); 
    socket.emit('data', {/** whatever data you need to send **/}); 
    socket.on('disconnect', (e) => { 
    log.info('user disconnected.'); 
    }); 
}); 

Client-side:

Seien Sie sicher, socket.io in der HTML-Datei enthalten (es von der Website erhalten). Dann in der Client-Seite js:

const socket = io(); 
socket.on('connect',() => { 
    console.log('connected to server.'); 
}); 
socket.on('disconnect',() => { 
    console.log('disconnected.'); 
}); 
socket.on('data', (data) => { 
    // this is where you receive the data 
    // do something with your data 
}); 
+1

Echtzeit persistent Streaming ist eigentlich ein Feature, das ich brauche, so klingt es wie socket.io der richtige Weg ist möchte ich – Harry

+0

ich dies zu schätzen wissen nehmen, macht es Dinge klarer. Die Daten, die ich an meine Front-End-Anwendung übergeben möchte, befinden sich tatsächlich auf einem separaten Mongodb-Server. Ich würde irgendwie eine Verbindung zu diesem Server von einer clientseitigen Datei mit einem Anruf wie solchem ​​herstellen müssen - var socket = io.connect ('Serveradresse hier'); Mein Problem ist, wo diese Verbindung in den Stack, den ich verwende, passt – Harry

+1

Nein, socket.io muss eine Verbindung zum Express-Webserver herstellen, nicht zum mongo Db-Server. Der Express-Webserver wird dann mit dem Mongo-DB-Server verbunden. Mit der NodeJS-API in der Verknüpfung in meiner Antwort müssen Sie die Daten aus der Datenbank abrufen und über einen Callback an die Datei socket.io übergeben. – frozen

Verwandte Themen