Ρυθμίστε μια διαδρομή WebSocket με σημαίες, πιστοποίηση και παραμέτρους
Μια διαδρομή SOCKET χρησιμοποιεί τα ίδια δομικά στοιχεία με μια διαδρομή HTTP. Από προεπιλογή τα μηνύματα είναι αντικείμενα JSON. Το @text κάνει τα εισερχόμενα μηνύματα απλά κείμενα και το @binary τα κάνει Buffer. Σε μια διαδρομή κειμένου, το send(message) εξακολουθεί να κωδικοποιεί σε JSON ό,τι στέλνει, οπότε ένα κείμενο φτάνει με εισαγωγικά· περάστε true ως δεύτερο όρισμα, send(message, true), για να σταλεί το κείμενο ως έχει. Ένα + πριν από το SOCKET δέχεται μόνο χρήστες που εγκρίνει το AUTH() (αλλιώς η σύνδεση απορρίπτεται) και τα τμήματα {name} είναι διαθέσιμα στο self.params. Το @csrf ελέγχει ένα token CSRF πριν γίνει δεκτή η σύνδεση: στείλτε το ως την παράμετρο csrf του query string (/secure/?csrf=...) και δείτε τη συνταγή CSRF για τα secret_csrf και $.csrf(). Ένα middleware συνδέεται με #name όπως σε οποιαδήποτε διαδρομή.
secret_csrf : change-this-secret-in-productionAUTH(function($) {
if ($.query.token === 'letmein')
$.success({ id: '1', name: 'Louis' });
else
$.invalid();
});exports.install = function() {
ROUTE('SOCKET /text/ @text', text);
ROUTE('SOCKET /bin/ @binary', binary);
ROUTE('+SOCKET /private/', private_socket);
ROUTE('SOCKET /room/{name}/', room);
ROUTE('SOCKET /secure/ @csrf', secure);
ROUTE('GET /where/', where);
ROUTE('GET /csrf/', csrf);
};
function text() {
this.on('message', function(client, message) {
client.send(typeof(message) + ':' + message.toUpperCase(), true);
});
}
function binary() {
this.on('message', function(client, message) {
client.send(Buffer.from(Buffer.isBuffer(message) ? 'buffer:' + message.length : 'other'));
});
}
function private_socket() {
this.on('open', function(client) {
client.send({ hello: client.user.name });
});
}
function room() {
var self = this;
self.on('open', function(client) {
client.send({ room: self.params.name });
});
}
function secure() {
this.on('open', function(client) {
client.send({ welcome: true });
});
}
function where($) {
$.json({ url: $.hostname('/bin/') });
}
function csrf($) {
$.json({ csrf: $.csrf() });
}