Express middleware for blocking access based on User Agent
npm install express-user-agent-blocker  
A lightweight user-agent blocker for Express.
Some bots just don't play by the rules and blatantly disrespect robots.txt. To these bots, we say "Nothing to see here - move along please..."
``shell`
npm i express-user-agent-blocker
This module has no dependencies and can be added anywhere in the express chain as long as it runs before serving any content that needs to be blocked.
`js
// JavaScript
const express = require('express')
const blocker = require('express-user-agent-blocker')
const app = express()
// ...
// other middleware
// ...
app.use(blocker(['Baiduspider', 'SomeHorridUA']))
// ...
// more middleware
// ...
`
`typescript
// TypeScript
import express from 'express'
import blocker from 'express-user-agent-blocker'
const app = express()
// ...
// other middleware
// ...
app.use(blocker(['Baiduspider', 'SomeHorridUA']))
// ...
// more middleware
// ...
`
js
// html response
app.use(blocker(['Baiduspider'], {
html: 'Let me make a bologna sandwich...
'
}))// plain text response
app.use(blocker(['Baiduspider'], {
text: 'Words hold no weight'
}))
`Result
If no custom message has been set (see above), any unwanted UAs visiting your application will be sent a default
JSON response:`json
{
"message": "Nothing to see here - move along please..."
}
`Enable default debug logging
Pass
euab:* in as part DEBUG when starting the express server, e.g.
`bash
log everything
DEBUG=euab:* node server.jslog only denied requests
DEBUG=euab:index node server.jslog the block regex only during startup
DEBUG=euab:buildUaBlockRegex node server.jslog only the message sent to the blocked UA
DEBUG=euab:respondToBlockedUa node server.js
`
Specifying a custom logger
Pass in a logger object with a
log function to call
`js
// console log
app.use(blocker(['Baiduspider'], {
logger: {
log: (message) => {
console.log(message)
}
}
}))
`Tests
Tested in node >= 7
Run tests with:
`shell
npm test
`Changelog
$3
- Chore: updated dev dependencies only - no functional changes
$3
- Chore: updated test dependencies only - no functional changes
$3
- Fixes broken test
$3
- Adds Typescript usage documentation
$3
- Adds TypeScript types
$3
- Adds testing support for Node 10 & 11
- Removes references to bithound
- Updates dependencies
$3
- Adds testing support for Node 9
- Updates dependencies
- Removes
done() callbacks in tests
- Removes bithound dependency$3
- Drops testing support for Node 6, but should continue to work as normal
$3
- Ups version of
express peer dependency to 4.5.x, which is patched for No Charset in Content-Type Header vulnerability
$3
- Additional README information
- Adds
express and debug as peer dependencies
- Updates JSDoc$3
- Enables passing in of alternative logger (currently defaults to
process.stdout`)- Adds option to send alternative message to blocked UAs
- Moves test files out of src folder
- Uses rollup to compile module files into single index.js
- Changelog didn't exist! 🙈