Using Node.js with Express as a Simple API Mock Server
This code snippet allows you to use Node.js with Express as a simple API mock server.
This idea I have found in one of the projects I was involved in. The author is unknown but nevertheless many thanks to him/her!
The code below creates a server with an API that is based on the file structure, means:
/test/mocks/api/customers.json
will be mapped to http://ipaddress:port/api/customers
/test/mocks/api/customers/1.json
will be mapped to http://ipaddress:port/api/customers/1
and so on...
If you need a new one e.g. "http://ipaddress:port/api/orders" just create a new file "orders.json" in the required directory "/test/mocks/api/", deploy it and restart the server.
It is very useful if just started to create your API and want to test some GETs, see "how it feels".
I use it locally but also on OpenShift. It works perfectly.
/* Define some initial variables. */
var applicationRoot = __dirname.replace(/\\/g,"/"),
ipaddress = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1',
port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
mockRoot = applicationRoot + '/test/mocks/api',
mockFilePattern = '.json',
mockRootPattern = mockRoot + '/**/*' + mockFilePattern,
apiRoot = '/api',
fs = require("fs"),
glob = require("glob");
/* Create Express application */
var express = require("express");
var app = express();
/* Configure a simple logger and an error handler. */
app.configure(function() {
app.use(express.logger());
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
/* Read the directory tree according to the pattern specified above. */
var files = glob.sync(mockRootPattern);
/* Register mappings for each file found in the directory tree. */
if(files && files.length > 0) {
files.forEach(function(fileName) {
var mapping = apiRoot + fileName.replace(mockRoot, '').replace(mockFilePattern,'');
app.get(mapping, function (req, res) {
var data = fs.readFileSync(fileName, 'utf8');
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write(data);
res.end();
});
console.log('Registered mapping: %s -> %s', mapping, fileName);
})
} else {
console.log('No mappings found! Please check the configuration.');
}
/* Start the API mock server. */
console.log('Application root directory: [' + applicationRoot +']');
console.log('Mock Api Server listening: [http://' + ipaddress + ':' + port + ']');
app.listen(port, ipaddress);Written by Adam Boczek
Related protips
Have a fresh tip? Share with Coderwall community!
JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.
Security insights from Cside