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..."
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.
// 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
import express from 'express'
import blocker from 'express-user-agent-blocker'
const app = express()
// ...
// other middleware
// ...
app.use(blocker(['Baiduspider', 'SomeHorridUA']))
// ...
// more middleware
// ...
// html response
app.use(blocker(['Baiduspider'], {
html: '<h1>Let me make a bologna sandwich...</h1>'
}))
// plain text response
app.use(blocker(['Baiduspider'], {
text: 'Words hold no weight'
}))
If no custom message has been set (see above), any unwanted UAs visiting your application will be sent a default JSON
response:
{
"message": "Nothing to see here - move along please..."
}
Pass euab:*
in as part DEBUG
when starting the express server, e.g.
# log everything
DEBUG=euab:* node server.js
# log only denied requests
DEBUG=euab:index node server.js
# log the block regex only during startup
DEBUG=euab:buildUaBlockRegex node server.js
# log only the message sent to the blocked UA
DEBUG=euab:respondToBlockedUa node server.js
Pass in a logger object with a log
function to call
// console log
app.use(blocker(['Baiduspider'], {
logger: {
log: (message) => {
console.log(message)
}
}
}))
Tested in node >= 7
Run tests with:
npm test
- Chore: updated dev dependencies only - no functional changes
- Chore: updated test dependencies only - no functional changes
- Fixes broken test
- Adds Typescript usage documentation
- Adds TypeScript types
- Adds testing support for Node 10 & 11
- Removes references to bithound
- Updates dependencies
- Adds testing support for Node 9
- Updates dependencies
- Removes
done()
callbacks in tests - Removes
bithound
dependency
- Drops testing support for Node 6, but should continue to work as normal
- Ups version of
express
peer dependency to 4.5.x, which is patched for No Charset in Content-Type Header vulnerability
- Additional README information
- Adds
express
anddebug
as peer dependencies - Updates JSDoc
- 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! 🙈