node-express-socket
Version:
A structure to add socket manager in express routes
224 lines (167 loc) • 4.95 kB
Markdown
# Express.js socket handler
This package is an easy way to implement and manage socket connections and also make a simple way to migrate from REST API to Socket API.
## Installation instruction:
`npm install node-express-socket`
## Use:
**Important:** It only can use by `Router` and you can't use by `express()` method like as `express().socket`
### Server side:
```
const express = require('express');
const socket = require("node-express-socket");
const router = express.Router();
const app = express();
socket(app, server);
router.socket("/test1/:fname/:lname", (req, res) => {
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
router.get("/test1/:fname/:lname", (req, res) => {
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
const server = app.listen(8000, () => {
console.log(`Server running at port:8000`);
});
app.use(router);
```
If you want to use a general route for 'Not found', it should be after socket use command.
<pre>
const express = require('express');
const socket = require("node-express-socket");
const router = express.Router();
const app = express();
socket(app, server);
router.socket("/test1/:fname/:lname", (req, res) => {
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
router.get("/test1/:fname/:lname", (req, res) => {
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
const server = app.listen(8000, () => {
console.log(`Server running at port:8000`);
});
app.use(router);
<b>app.use((req, res, next) => {
res.status(404).send("404 - not found");
});</b>
</pre>
Get user socket id
<pre>
const express = require('express');
const socket = require("node-express-socket");
const router = express.Router();
const app = express();
socket(app, server);
router.socket("/test1/:fname/:lname", (req, res) => {
<b>console.log(req.socketId);</b>
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
router.get("/test1/:fname/:lname", (req, res) => {
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
const server = app.listen(8000, () => {
console.log(`Server running at port:8000`);
});
app.use(router);
app.use((req, res, next) => {
res.status(404).send("404 - not found");
});
</pre>
Send message to specific user
<pre>
const express = require('express');
const socket = require("node-express-socket");
const router = express.Router();
const app = express();
let users = [/*user ids*/];
socket(app, server);
router.socket("/test1/:fname/:lname", (req, res) => {
<b>users.push(req.socketId);</b>
<b>res.sendTo("Hi", ...users);</b>
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
router.get("/test1/:fname/:lname", (req, res) => {
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
const server = app.listen(8000, () => {
console.log(`Server running at port:8000`);
});
app.use(router);
app.use((req, res, next) => {
res.status(404).send("404 - not found");
});
</pre>
Send broadcast message
<pre>
const express = require('express');
const socket = require("node-express-socket");
const router = express.Router();
const app = express();
socket(app, server);
router.socket("/test1/:fname/:lname", (req, res) => {
<b>res.broadcast("Hi");</b>
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
router.get("/test1/:fname/:lname", (req, res) => {
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
const server = app.listen(8000, () => {
console.log(`Server running at port:8000`);
});
app.use(router);
app.use((req, res, next) => {
res.status(404).send("404 - not found");
});
</pre>
Response socket message from out of socket methods
<pre>
const express = require('express');
const socket = require("node-express-socket");
const router = express.Router();
const app = express();
socket(app, server);
router.socket("/test1/:fname/:lname", (req, res) => {
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
router.get("/test1/:fname/:lname", (req, res) => {
res.broadcastSocket("Hi");
res.sendSocketTo("Hi", "/*user1 id*/", "/*user2 id*/", ...);
res.send({m:req.method, q:req.query, b:req.body, p:req.params});
});
const server = app.listen(8000, () => {
console.log(`Server running at port:8000`);
});
app.use(router);
app.use((req, res, next) => {
res.status(404).send("404 - not found");
});
</pre>
### Client side:
```
// 1) Create and connect socket object
const socket = io();
// 2) Send request using WebSocket
socket.emit('/test1/joe/gandomi?qp1=v1', {
var1: "value1",
var2: "value2"
});
// 3) Receive response using WebSocket
socket.on('/test/*/*', data => {
console.log(data);
});
```
### Client log:
```
{
m: "SOCKET",
q: {
qp1: "v1"
},
p: {
fname: "joe",
lname: "gandomi"
},
b: {
var1: "value1",
var2: "value2"
}
}
```