Skip to main content

response

The response object is used to send HTTP responses back to the client. It is passed as the third parameter to your mim handler.

mimikModule.exports = (context, request, response) => {
// Use response to send data back
response.end('Hello World!');
};

Properties

PropertyTypeDefaultDescription
statusCodenumber200HTTP status code to send

Methods

MethodDescription
setHeader(key, value)Set a response header
write(content)Write to response stream (for streaming)
end(body)Send response and close connection
writeMimeFile(filePath, mimeType)Send a file as response

statusCode

Set the HTTP status code before calling end() or write().

app.get('/user/:id', (request, response) => {
var user = context.storage.getItem('user:' + request.params.id);

if (!user) {
response.statusCode = 404;
response.end('User not found');
return;
}

response.end(user);
});

Common Status Codes

// Success
response.statusCode = 200; // OK
response.statusCode = 201; // Created
response.statusCode = 204; // No Content

// Client errors
response.statusCode = 400; // Bad Request
response.statusCode = 401; // Unauthorized
response.statusCode = 403; // Forbidden
response.statusCode = 404; // Not Found
response.statusCode = 409; // Conflict
response.statusCode = 422; // Unprocessable Entity

// Server errors
response.statusCode = 500; // Internal Server Error
response.statusCode = 502; // Bad Gateway
response.statusCode = 503; // Service Unavailable

setHeader()

Sets an HTTP response header.

response.setHeader(key, value) → boolean
ParameterTypeDescription
keystringHeader name
valuestringHeader value

Returns: true on success.

app.get('/data', (request, response) => {
response.setHeader('Content-Type', 'application/json');
response.setHeader('Cache-Control', 'no-cache');
response.setHeader('X-Custom-Header', 'custom-value');
response.end(JSON.stringify({ data: 'value' }));
});

Common Headers

// Content type
response.setHeader('Content-Type', 'application/json');
response.setHeader('Content-Type', 'text/html');
response.setHeader('Content-Type', 'text/plain');

// Caching
response.setHeader('Cache-Control', 'no-cache');
response.setHeader('Cache-Control', 'max-age=3600');

// CORS
response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
response.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');

// Download
response.setHeader('Content-Disposition', 'attachment; filename="report.pdf"');

write()

Writes data to the response stream without closing the connection. Use for streaming responses.

response.write(content) → boolean
ParameterTypeDescription
contentstringContent to write

Returns: true on success.

Throws: Error if client disconnected.

app.get('/stream', (request, response) => {
response.setHeader('Content-Type', 'text/plain');

response.write('Starting...\n');
response.write('Processing step 1...\n');
response.write('Processing step 2...\n');
response.write('Done!\n');

response.end();
});

Server-Sent Events (SSE)

app.get('/events', (request, response) => {
response.setHeader('Content-Type', 'text/event-stream');
response.setHeader('Cache-Control', 'no-cache');
response.setHeader('Connection', 'keep-alive');

// Send events
response.write('data: {"event": "connected"}\n\n');
response.write('data: {"event": "update", "value": 1}\n\n');
response.write('data: {"event": "update", "value": 2}\n\n');

response.end();
});

end()

Sends the response body and closes the connection.

response.end(body) → boolean
ParameterTypeDescription
bodystringResponse body content (optional)

Returns: true on success.

Simple Response

app.get('/', (request, response) => {
response.end('Hello World!');
});

JSON Response

app.get('/data', (request, response) => {
response.setHeader('Content-Type', 'application/json');
response.end(JSON.stringify({
status: 'ok',
data: { key: 'value' }
}));
});

Empty Response

app.delete('/resource/:id', (request, response) => {
// Delete resource...
response.statusCode = 204;
response.end(); // No body
});

Error Response

app.get('/user/:id', (request, response) => {
var user = context.storage.getItem('user:' + request.params.id);

if (!user) {
response.statusCode = 404;
response.setHeader('Content-Type', 'application/json');
response.end(JSON.stringify({
error: 'Not Found',
message: 'User does not exist'
}));
return;
}

response.setHeader('Content-Type', 'application/json');
response.end(user);
});

writeMimeFile()

Sends a file as the response with the specified MIME type.

response.writeMimeFile(filePath, mimeType) → boolean
ParameterTypeDescription
filePathstringPath to the file
mimeTypestringMIME type of the file

Returns: true on success.

Serving Images

app.get('/photo/:id', (request, response) => {
var photoPath = '/data/photos/' + request.params.id + '.jpg';
response.writeMimeFile(photoPath, 'image/jpeg');
});

File Download

app.get('/download/:filename', (request, response) => {
var filename = request.params.filename;
var filePath = '/data/files/' + filename;

response.setHeader('Content-Disposition', 'attachment; filename="' + filename + '"');
response.writeMimeFile(filePath, 'application/octet-stream');
});

Common MIME Types

ExtensionMIME Type
.jsonapplication/json
.pdfapplication/pdf
.zipapplication/zip
.jpg, .jpegimage/jpeg
.pngimage/png
.gifimage/gif
.svgimage/svg+xml
.htmltext/html
.csstext/css
.jsapplication/javascript
.txttext/plain
.xmlapplication/xml
.mp3audio/mpeg
.mp4video/mp4

Common Patterns

JSON API Response

function sendJson(response, statusCode, data) {
response.statusCode = statusCode;
response.setHeader('Content-Type', 'application/json');
response.end(JSON.stringify(data));
}

app.get('/users', (request, response) => {
var users = [];
context.storage.eachItemByTag('users', function(key, value) {
users.push(JSON.parse(value));
return true;
});

sendJson(response, 200, { data: users });
});

app.post('/users', (request, response) => {
var user = JSON.parse(request.body);
context.storage.setItemWithTag('user:' + user.id, JSON.stringify(user), 'users');

sendJson(response, 201, { created: true, id: user.id });
});

Error Handler

function sendError(response, statusCode, message) {
response.statusCode = statusCode;
response.setHeader('Content-Type', 'application/json');
response.end(JSON.stringify({
error: true,
code: statusCode,
message: message
}));
}

app.get('/user/:id', (request, response) => {
var user = context.storage.getItem('user:' + request.params.id);

if (!user) {
sendError(response, 404, 'User not found');
return;
}

response.setHeader('Content-Type', 'application/json');
response.end(user);
});

CORS Headers

function setCorsHeaders(response) {
response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
response.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
}

app.options('/*', (request, response) => {
setCorsHeaders(response);
response.statusCode = 204;
response.end();
});

app.get('/api/data', (request, response) => {
setCorsHeaders(response);
response.setHeader('Content-Type', 'application/json');
response.end(JSON.stringify({ data: 'value' }));
});