94 cards across 6 sections
http
app.use
next()
express.Router
helmet
cors
morgan
passport
express-session
latest
latest-4
path-to-regexp
app.del()
req.param()
res.redirect('back')
app.get
app.post
app.put
app.delete
app.patch
(req, res, next)
/users/:id
req.params.id
req.query
?page=2&sort=asc
{ page: '2', sort: 'asc' }
express.Router()
app.use('/api', router)
app.route('/users/:id').get(getUser).put(updateUser).delete(deleteUser)
:name?
*
{*splat}
req.body
req.headers
req.method
res.status(code)
res.json(obj)
res.send(body)
res.redirect(url)
req
res
app.use(fn)
app.get(path, fn)
express.json()
express.urlencoded({ extended: true })
body-parser
express.static('public')
ETag
compression
app.use('/admin', authMiddleware)
/admin
(err, req, res, next)
next(err)
async
express-async-handler
app.use((req, res) => res.status(404).json(...))
err.status = 400
app.use(helmet())
Content-Security-Policy
X-Content-Type-Options
Strict-Transport-Security
app.use(cors({ origin: allowedOrigins }))
origin: '*'
express-rate-limit
429 Too Many Requests
express.json({ limit: '100kb' })
app.set('trust proxy', 1)
X-Forwarded-For
req.ip
secure
req.params
zod
express-validator
helmet()
app.use(cookieParser())
Cookie
req.cookies
req.signedCookies
req.session
connect-redis
connect-pg-simple
MemoryStore
httpOnly: true
secure: true
sameSite: 'lax'
'strict'
secret
req.session.destroy(callback)
res.clearCookie('connect.sid')
sameSite
res.sendFile(path)
Content-Type
res.download(path, filename)
sendFile
Content-Disposition: attachment
readable.pipe(res)
.pipe()
res.write()
app.use(compression())
app.set('view engine', 'ejs')
res.render('template', data)
res.format({ json: () => ..., html: () => ... })
Accept
supertest
app
await request(app).get('/users').expect(200)
app.listen()
NODE_ENV=production
express
SIGTERM
server.close()
morgan('combined')
app.get('/user/:id', async (req, res) => { const user = await db.findUser(req.params.id); res.json(user);});
const wrap = (fn) => (req, res, next) => fn(req, res, next).catch(next);app.get('/user/:id', wrap(getUser));
const helmet = require('helmet');app.use(helmet());
cors()
app.use(cors({ origin: ['https://app.example.com'], credentials: true,}));
const limiter = rateLimit({ windowMs: 60_000, max: 20 });app.use('/api/login', limiter);
limit
express.json
app.use(express.json({ limit: '100kb' }));
httpOnly
app.use(session({ cookie: { httpOnly: true, secure: true, sameSite: 'lax' },}));
app.use(helmet());app.use(express.json());app.use('/api', router);app.use(notFound);app.use(errorHandler);
app.use((err, req, res, next) => { res.status(err.status || 500).json({ error: err.message });});
// routes/users.jsconst router = express.Router();router.get('/', listUsers);module.exports = router;
trust proxy
req.secure
app.set('trust proxy', 1);
app.get('/export', (req, res) => { fs.createReadStream('data.csv').pipe(res);});
listen()
const request = require('supertest');const app = require('../app');await request(app).get('/health').expect(200);
process.on('SIGTERM', () => { server.close(() => process.exit(0));});
compression()
app.use(compression({ filter: (req, res) => !req.path.startsWith('/files') }));
X-Content-Type-Options: nosniff
Origin
origin
Access-Control-Allow-Origin
res.send()
request(app)
await request(app).post('/users').send(payload).expect(201)
next
res.send
res.json
res.end
'100kb'
Authorization
credentials: true
app.set('trust proxy', ...)
express.urlencoded()
res.sendFile