Usando Node.js com Express como um servidor simulado de API simples

Este snippet de código permite que você use Node.js com Express como um servidor simulado de API simples.
Essa ideia eu encontrei em um dos projetos em que estive envolvido. O autor é desconhecido, mas muito obrigado a ele!

O código abaixo cria um servidor com uma API que se baseia na estrutura do arquivo, significa:

/test/mocks/api/customers.json
será mapeado para http: // ipaddress: port / api / customers

/test/mocks/api/customers/1.json
será mapeado para http: // ipaddress: port / api / customers / 1

e assim por diante…

Se você precisar de um novo, por exemplo, ” http: // ipaddress: port / api / orders “, apenas crie um novo arquivo “orders.json” no diretório necessário “/ test / mocks / api /”, implante-o e reinicie o servidor .

É muito útil se você acabou de começar a criar sua API e deseja testar alguns GETs, veja “como é”.

Eu uso localmente, mas também no OpenShift. Funciona perfeitamente.

/* 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);