2018-10-12 15:37:13 -04:00
---
title: Chain Middleware to Create a Time Server
---
2019-07-24 00:59:27 -07:00
# Chain Middleware to Create a Time Server
2018-10-12 15:37:13 -04:00
2019-07-24 00:59:27 -07:00
---
## Problem Explanation
2018-10-12 15:37:13 -04:00
2019-07-02 07:05:15 +05:30
Similar to the last challenge, but now we are chaining 2 functions together. It seems complicated, but it's just JavaScript.
2018-10-12 15:37:13 -04:00
2019-07-24 00:59:27 -07:00
---
## Hints
### Hint 1
2019-07-02 07:05:15 +05:30
Instead of responding with the time we can also add any arbitrary property to the request object and pass it to the next function by calling the `next()` method. This is trivial, but it makes for a decent example. The code will looks like this:
2018-10-12 15:37:13 -04:00
```javascript
2019-07-24 00:59:27 -07:00
app.get(
"/now",
(req, res, next) => {
// adding a new property to req object
// in the middleware function
req.string = "example";
next();
},
(req, res) => {
// accessing the newly added property
// in the main function
res.send(req.string);
}
);
2019-07-02 07:05:15 +05:30
```
2019-07-24 00:59:27 -07:00
---
## Solutions
< details > < summary > Solution 1 (Click to Show/Hide)< / summary >
2019-07-02 07:05:15 +05:30
```javascript
2019-07-24 00:59:27 -07:00
app.get(
"/now",
(req, res, next) => {
req.time = new Date().toString();
next();
},
(req, res) => {
res.send({
time: req.time
});
}
);
2018-10-12 15:37:13 -04:00
```
2019-07-24 00:59:27 -07:00
< / details >
< details > < summary > Solution 2 (Click to Show/Hide)< / summary >
2018-10-12 15:37:13 -04:00
2019-07-02 07:05:15 +05:30
You can also declare the middleware beforehand to use in multiple routes as shown below:
2018-10-12 15:37:13 -04:00
2019-07-02 07:05:15 +05:30
```javascript
const middleware = (req, res, next) => {
req.time = new Date().toString();
next();
};
2018-10-12 15:37:13 -04:00
2019-07-02 07:05:15 +05:30
app.get("/now", middleware, (req, res) => {
res.send({
time: req.time
});
});
```
2019-07-24 00:59:27 -07:00
< / details >