# connect flash

***

**1. Displaying a Flash Message**

```javascript
req.flash('info', 'This is an info message.');
res.redirect('/');
```

**2. Retrieving Flash Messages**

```javascript
const messages = req.flash();
res.render('index', { messages });
```

**3. Clearing Flash Messages**

```javascript
req.flash('info', 'This is an info message.');
req.flash('info', null);
```

**4. Displaying Multiple Flash Messages**

```javascript
req.flash('info', 'This is an info message.');
req.flash('success', 'This is a success message.');
req.flash('error', 'This is an error message.');
```

**5. Using Custom Keys**

```javascript
req.flash('custom-key', 'This is a custom message.');
```

**6. Setting the Flash Message Expiration**

```javascript
req.flash('info', {
  message: 'This is an info message.',
  timeout: 5000 // 5 seconds
});
```

**7. Using Connect-Flash Middleware**

```javascript
const flash = require('connect-flash');

// Add to Express middleware stack
app.use(flash());
```

**8. Displaying Flash Messages with Render**

```javascript
res.render('index', {
  messages: res.locals.getMessages()
});
```

**9. Displaying Flash Messages with Pug Template**

```pug
each message in messages
  p= message.msg
```

**10. Displaying Flash Messages with EJS Template**

```ejs
<% for (const [type, messages] of Object.entries(messages)) { %>
  <div class="alert alert-<%= type %>">
    <% for (const message of messages) { %>
      <p><%= message.msg %></p>
    <% } %>
  </div>
<% } %>
```

**11. Displaying Flash Messages with Handlebars Template**

```handlebars
{{#each messages}}
  <div class="alert alert-{{type}}">
    {{#each this}}
      <p>{{msg}}</p>
    {{/each}}
  </div>
{{/each}}
```

**12. Using Flash Messages for Validation Errors**

```javascript
const { validationResult } = require('express-validator');

// POST /users
router.post('/users', async (req, res, next) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    req.flash('errors', errors.array());
    return res.redirect('/users');
  }

  // ...
});
```

**13. Displaying Errors with Pug Template**

```pug
each error in errors
  p= error.msg
```

**14. Displaying Errors with EJS Template**

```ejs
<% if (errors.length) { %>
  <div class="alert alert-danger">
    <% for (const error of errors) { %>
      <p><%= error.msg %></p>
    <% } %>
  </div>
<% } %>
```

**15. Using Flash Messages for Success Notifications**

```javascript
// POST /users
router.post('/users', async (req, res, next) => {
  // ...

  req.flash('success', 'User created successfully.');
  res.redirect('/users');
});
```

**16. Displaying Success Notifications with Pug Template**

```pug
each message in messages
  if message.type === 'success'
    p= message.msg
```

**17. Displaying Success Notifications with EJS Template**

```ejs
<% if (messages.success) { %>
  <div class="alert alert-success">
    <% for (const message of messages.success) { %>
      <p><%= message %></p>
    <% } %>
  </div>
<% } %>
```

**18. Using Flash Messages for Information**

```javascript
// GET /users
router.get('/users', async (req, res, next) => {
  const users = await User.find();

  req.flash('info', `Found ${users.length} users.`);
  res.render('users', { users });
});
```

**19. Displaying Information with Pug Template**

```pug
each message in messages
  if message.type === 'info'
    p= message.msg
```

**20. Displaying Information with EJS Template**

```ejs
<% if (messages.info) { %>
  <div class="alert alert-info">
    <% for (const message of messages.info) { %>
      <p><%= message %></p>
    <% } %>
  </div>
<% } %>
```

**21. Using Flash Messages for Warnings**

```javascript
// GET /users/:id
router.get('/users/:id', async (req, res, next) => {
  const user = await User.findById(req.params.id);

  if (!user) {
    req.flash('warning', 'User not found.');
    return res.redirect('/users');
  }

  res.render('user', { user });
});
```

**22. Displaying Warnings with Pug Template**

```pug
each message in messages
  if message.type === 'warning'
    p= message.msg
```

**23. Displaying Warnings with EJS Template**

```ejs
<% if (messages.warning) { %>
  <div class="alert alert-warning">
    <% for (const message of messages.warning) { %>
      <p><%= message %></p>
    <% } %>
  </div>
<% } %>
```

**24. Using Flash Messages for Errors**

```javascript
// GET /users/:id
router.get('/users/:id', async (req, res, next) => {
  const user = await User.findById(req.params.id);

  if (!user) {
    req.flash('error', 'User not found.');
    return res.redirect('/users');
  }

  res.render('user', { user });
});
```

**25. Displaying Errors with Pug Template**

```pug
each message in messages
  if message.type === 'error'
    p= message.msg
```
