# 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"
    }
}
```