2016-09-07 3 views
0

Ich möchte jedes Mal, wenn ein Socket ausgeführt wird, ein neues Dokument in einer Mongodb-Sammlung erstellen, aber diese Sammlungen sollten zu der Seite gehören, auf der ich bin.Anforderungsparameter innerhalb des Sockets

Im Moment bin ich hardcording pageId wie diese

io.on('connection', (socket) => { 
    const pageId = '57cc491c95f2513e5aad2590'; 

    socket.on('new nodes', (positions) => { 
    Document.create({pageId: pageId}, (err, doc) => { 
     // ... 
    }); 
    }); 
}); 

aber ich möchte die ID von req.params.pageId innerhalb einer express Route

app.route('/pages/:pageId').get((req, res) => { 
    // ... 
}); 

Antwort

0

Die socket.io Verbindung mit sich selbst und isn steht bekommen kein Teil eines Express-Streckenbearbeiters. Sie können also nicht direkt von der Verbindung socket.io aus auf req.params.pageId zugreifen, da diese Anforderung beendet ist, wenn die socket.io-Verbindung eintrifft. Sie müssen also zusätzliche Informationen angeben, wenn Sie eine Verbindung von socket.io herstellen oder wenn Sie eine bestimmte socket.io-Nachricht senden, die die Seiten-ID angibt.

Also, Sie haben ein paar Möglichkeiten:

  1. Wenn Sie von der Seite verbinden, können Sie einen Abfrageparameter auf der Connect-URL enthalten, die die pageId angibt. Dann können Sie in Ihrem Code io.on('connection', ...) diesen Abfrageparameter betrachten, um die pageId abzurufen.

  2. Wenn Sie die Nachricht new nodes senden, können Sie ein Datenargument einschließen, das die PageId angibt. Diese

kann entweder implementiert werden in Ihrem Javascript auf der Seite, die herausfindet, was pageId es ist und fügt diesen als den gewünschten Parameter oder es kann mehr automatisch durch was auch immer Rendering erfolgen Engine erstellt Ihre erste Seite (so Die pageId wird zum Seitenrenderzeitpunkt direkt in Ihren Code eingefügt.

+0

@Jamgreen - Erklärt dies Ihre Optionen? – jfriend00

Verwandte Themen