Skip to content

Integracion con Express

Variables de entorno

ENGINE_HTTP_URL=https://api.disnomia.econdor.com
ENGINE_API_KEY=pi_com_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENGINE_TIMEOUT_MS=5000

Instalacion

Ventana de terminal
npm install axios

Cliente minimo

lib/disnomia.ts
import axios from 'axios';
const client = axios.create({
baseURL: process.env.ENGINE_HTTP_URL,
timeout: parseInt(process.env.ENGINE_TIMEOUT_MS ?? '5000'),
headers: { 'x-api-key': process.env.ENGINE_API_KEY },
});
export interface EvaluatePayload {
exerciseId: string;
area: string;
type: string;
answer: string;
correctAnswer?: string | string[];
content?: Record<string, unknown>;
difficulty?: number;
}
export async function evaluate(payload: EvaluatePayload) {
const { data } = await client.post('/api/v1/exercises/evaluate', payload);
return data as {
correct: boolean;
score: number;
feedback: string;
metadata: { area: string; type: string };
};
}

Uso en una ruta Express

routes/exercises.ts
import { Router } from 'express';
import { evaluate } from '../lib/disnomia';
const router = Router();
router.post('/submit', async (req, res) => {
try {
const result = await evaluate({
exerciseId: req.body.exerciseId,
area: req.body.area,
type: req.body.type,
answer: req.body.answer,
correctAnswer: req.body.correctAnswer,
});
res.json(result);
} catch (err: any) {
const status = err.response?.status ?? 500;
const message = err.response?.data?.message ?? 'Engine error';
res.status(status).json({ error: message });
}
});
export default router;

Con fetch nativo (Node 18+)

Sin dependencias externas:

async function evaluate(payload: Record<string, unknown>) {
const res = await fetch(
`${process.env.ENGINE_HTTP_URL}/api/v1/exercises/evaluate`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': process.env.ENGINE_API_KEY!,
},
body: JSON.stringify(payload),
signal: AbortSignal.timeout(5000),
},
);
if (!res.ok) {
const err = await res.json().catch(() => ({}));
throw new Error(`Engine ${res.status}: ${err.message ?? res.statusText}`);
}
return res.json();
}