
Security News
curl Shuts Down Bug Bounty Program After Flood of AI Slop Reports
A surge of AI-generated vulnerability reports has pushed open source maintainers to rethink bug bounties and tighten security disclosure processes.
A super lightweight web framework with routing and prototype mixin support.
It's available through npm:
npm install root
Usage is simple
var root = require('root');
var app = root();
app.get('/', function(request, response) {
response.send({hello:'world'});
});
app.post('/echo', function(request, response) {
request.on('json', function(body) {
response.send(body);
});
});
app.listen(8080);
You can extend the request and response with your own methods
app.use('response.time', function() {
this.send({time:this.request.time});
});
app.use('request.time', {getter:true}, function() {
return Date.now();
});
app.get(function(request, response) {
response.time();
});
Routing is done using murl.
Use the get, post, put, del, patch or options method to specify the HTTP method you want to route
app.get('/hello/{world}', function(request, response) {
response.send({world:request.params.world});
});
app.get('/test', function(request, response, next) {
// call next to call the next matching route
next();
});
app.get('/test', function(request, response) {
response.send('ok');
});
Before routing an incoming url it is first decoded and normalized
/../../ ⇨ //foo/bar/../baz ⇨ /foo/baz/foo%20bar ⇨ /foo bar/foo%2fbar ⇨ /foo/barThis basicly means that you don't need to worry about /.. attacks when serving files or similar.
You can specify an error handler for a specific error code by using the error function
app.get('/foo', function(request, response) {
response.error(400, 'bad request man');
});
app.error(404, function(request, response, opts) {
// opts contains .message which is the message passed to response.error
// and .stack if an error was passed
response.send({error:'could not find route'});
});
app.error(function(request, response, opts) {
response.send({error:'catch all other errors'});
});
Route requests through an sub app by using app.route
var mobileApp = root();
var myApp = root();
...
myApp.all('/m/*', function(request, response, next) {
// all routes starting with /m should route through our mobile app as well
mobileApp.route(request, response, next);
});
As a shortcut you can just pass the app directly
myApp.all('/m/*', mobileApp);
This allows you to easily split up your application into seperate parts and mount them all on one server
response.send(json) will send back json.response.send(string) will send back html (if no Content-Type has been set).response.error(statusCode, messageOrError) send back an errorresponse.redirect(url) send a http redirectrequest.on('json', listener) will buffer and parse the body as JSON.request.on('form', listener) will buffer and parse the body as a url encoded formrequest.on('body', listener) will buffer the body as a stringrequest.query contains the parsed querystring from the urlapp.use(methodName, options, fn) extend the request or response with a new prototype methodapp.(get|put|post|del|options|patch)(pattern, fn) add a route for a http methodapp.all(pattern, fn) route all methodsapp.route(request, response, callback) route a request or response from another appapp.error(statusCode, fn) add an error handler. use 4xx to match all 400 errors etc.app.on('route', function (request, response) {}) emitted every time a request is being routedapp.on('match', function (request, response, pattern) {}) emitted every time a URL pattern is matchedMIT
FAQs
a super lightweight web framework featuring prototype mixin support and routing
We found that root demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
A surge of AI-generated vulnerability reports has pushed open source maintainers to rethink bug bounties and tighten security disclosure processes.

Product
Scan results now load faster and remain consistent over time, with stable URLs and on-demand rescans for fresh security data.

Product
Socket's new Alert Details page is designed to surface more context, with a clearer layout, reachability dependency chains, and structured review.