Skip to content

Request Lifecycle in MARS Engine ​

Understand how MARS Engine processes every API and WebSocket call-from start to finish.

Overview ​

Each request in MARS Engine-whether HTTP or WebSocket-runs inside a secure, isolated execution context that includes:

  • A database transaction
  • A fresh set of input parameters
  • A response buffer
  • Scoped helpers and global utilities

This ensures safety, predictability, and full control over data flow from input to output.

Lifecycle Stages ​

text
Request received
↓
Open transaction
↓
Run script
↓
Buffer output
↓
Auto commit (or rollback on error)
↓
Send response

MARS Engine provides unified input handling:

js
const userId = param('user_id');
const token = cookie('auth_token');
const role = session('user_role');
  • param() supports query, body, and file fields
  • session() autoloads by sid (from query, body, or header)
  • Input helpers are available in both API and WebSocket scripts

2. Headers: header(), response.status() ​

Control response headers and status before writing data:

js
header('X-Custom-Header', 'MARS');
response.status(201); // Created

Set these early-once write() is called, headers are locked in.

3. Core logic & helpers ​

Use any combination of MARS Engine built-ins:

js
const row = db.query('SELECT * FROM users WHERE id = ?', userId)[0];
const now = new DateTime().toString();
write("data", { row, now})

Available helpers: db, fs, net, mail, fcm, dns, sha, base64, sanitize, DateTime, etc.

4. Output: write() ​

Write response fields (JSON or file stream):

js
write('user', row);
write('fetchedAt', now);
  • Keys must be unique-no duplicate keys allowed
  • You may write(row.file_content) to stream binary

5. Exiting the script: exit(), errors ​

Exit options:

  • exit() if you need to force stop
  • exit() behaves like an exception. If you call it inside a try block, it will trigger the corresponding catch block.
  • Throwing an error triggers automatic rollback

Example:

js
if (users.length===0) { 
  response.status(404); 
  write('error', 'User not found'); 
  exit();
}

6. Transaction commit/rollback ​

By default:

  • If the script finishes without errors → MARS commits
  • If it throws or exits abnormally → MARS rolls back

You can commit early:

js
db.commit();
write('step', 'done'); // Continue with additional logic

Or cancel manually:

js
db.rollback();
write('status', 'cancelled');

In WebSocket scripts ​

Lifecycle stages are similar, but:

  • No HTTP headers
  • Use onOpen, onMessage, onClose
  • Still benefits from param(), session(), write(), db.query()

Example:

js
// Websocket onMessage method

const msg = param('msg', 'ping');
write('echo', msg);

Summary ​

StageWhat to use
Inputparam(), cookie(), session()
LogicAny built-in or custom logic
Outputwrite(), header(), response.status()
Controlexit(), error handling
DB safetyAutomatic transaction commit/rollback

Understanding the request lifecycle helps you build safer, faster, and more maintainable APIs in MARS Engine.