Documentation Index
Fetch the complete documentation index at: https://docs.modelence.com/llms.txt
Use this file to discover all available pages before exploring further.
Queries are read operations that retrieve data without modifying state.
They are similar to GET endpoints in REST.
Version Requirements
Typed client modules for queries require:
createClientModule(...).query() - available since modelence@0.15.0
Defining Queries
Define queries inside a module’s queries object:
import { Module } from 'modelence/server';
import { dbTodos } from './db';
export default new Module('todo', {
queries: {
// Get a single todo by ID
async getOne({ id }) {
return await dbTodos.findById(id);
},
// Get all todos for the current user
async getAll({}, { user }) {
return await dbTodos.fetch({ userId: user.id });
},
// Get todos with filtering
async getCompleted({}, { user }) {
return await dbTodos.fetch({
userId: user.id,
isCompleted: true,
});
},
},
});
Query Parameters
Queries receive two arguments:
- Input parameters - data passed from the client.
- Context - server-side context including:
user - current authenticated user (if logged in)
req - Express request object
res - Express response object
Calling Queries from the Client
callMethod
import { callMethod } from 'modelence/client';
const todos = await callMethod('todo.getAll');
const todo = await callMethod('todo.getOne', { id: '123' });
modelenceQuery (TanStack Query)
import { useQuery } from '@tanstack/react-query';
import { modelenceQuery } from '@modelence/react-query';
function TodoList() {
const { data: todos } = useQuery(modelenceQuery('todo.getAll'));
return <div>{/* render todos */}</div>;
}
createClientModule(...).query() (typed client modules)
createClientModule(...).query() is available since modelence@0.15.0.
src/server/admin/index.ts
import { Module } from 'modelence/server';
export default new Module('admin', {
queries: {
async getUsers({ page }: { page: number }) {
// returns User[]
},
},
});
import type adminModule from '../server/admin';
import { createClientModule } from 'modelence/client';
export const admin = createClientModule<typeof adminModule>('admin');
src/components/AdminPanel.tsx
import { useQuery } from '@tanstack/react-query';
import { admin } from '../client/admin';
function AdminPanel() {
const { data: users } = useQuery(admin.query('getUsers', { page: 1 }));
return <div>{/* render users */}</div>;
}