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