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
| Property | Type | Default | Description |
|---|---|---|---|
statusCode | number | 200 | HTTP status code to send |
Methods
| Method | Description |
|---|---|
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
| Parameter | Type | Description |
|---|---|---|
key | string | Header name |
value | string | Header 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
| Parameter | Type | Description |
|---|---|---|
content | string | Content 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
| Parameter | Type | Description |
|---|---|---|
body | string | Response 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
| Parameter | Type | Description |
|---|---|---|
filePath | string | Path to the file |
mimeType | string | MIME 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
| Extension | MIME Type |
|---|---|
.json | application/json |
.pdf | application/pdf |
.zip | application/zip |
.jpg, .jpeg | image/jpeg |
.png | image/png |
.gif | image/gif |
.svg | image/svg+xml |
.html | text/html |
.css | text/css |
.js | application/javascript |
.txt | text/plain |
.xml | application/xml |
.mp3 | audio/mpeg |
.mp4 | video/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' }));
});
Related
- request: Incoming request object
- context.http: HTTP client API
- context.storage: Persistent storage API
- context.info: Node metadata and environment