A NodeJS connector for 4D bases
// Import the Client contructor from the module
const { Client } = require('@4djs/client');
// Create a client instance with basic credentials
const c = new m.Client(
'http://localhost/rest', {
type: 'basic',
user: 'admin',
pass: 'admin'
},
{
ctx: { req, res },
},
);
// Create a client instance with token credentials
const c = new m.Client(
'http://localhost/rest', {
type: 'token',
token: 'admin',
authUrl: '/your-api/login'
},
{
ctx: { req, res },
},
);
// Get the catalog from client
const { ds } = await c.getCatalog();
Suppose that we have a catalog containing a DataClass named Employee
.
Running this Query:
const collection = await ds.Employee.query('firstname == :1', 'Employee');
Looks for employees having Employee
as a firstname.
The NodeJS Client allows request chaining. As an example, if you run this request:
const array = await ds.Employee
.query('firstname == :1', 'Employee')
.orderBy('firstname asc')
.skip(20).limit(5)
.toArray('ID, firstname, lastname, company.name');
It will:
- Sort the result in ascending order by
firstname
- Skip
20 entities
- Limit the result to
5 entities
- Converts the result to an array
- Selects the specified attributes
To optimize performance, the client will prepare the request in the client side
(NodeJS), and sends only one request to 4D.
Creating an entity is as simple as:
const entity = new ds.Employee({ firstname: 'Employee' });
await entity.save();
To run a DataClass method:
const result = await ds.Employee.dataclassMethod('param');
And this is how we can execute an entity method
const entity = await ds.Employee.find('ID = :1', 10108, {
$attributes: 'ID',
});
const result = await entity.getFullName();
In the example above:
- We retrieve an employee having the ID
10108
and we select only itsID
attribute - We execute the entity method named
getFullName
const entity = await ds.Employee.find('ID = :1', 10108);
const employer = entity.employer;
await employer.refresh();
In the example above :
- We retrieve an employee having the ID
10108
and we select only itsID
attribute - We get the related entity/entities attribute (we get an instance of Employee / EmployeeCollection)
- We load the related entity/entities from database
npm i # Will install the NodeJS dependencies
npm run build # Will transpile the code into javascript code
Another option is to run this command
npm run dev
This command will watch the typescript changes, then it will transpile the code to javascript