Saltar a contenido

Crear Controladores en JS

Los controladores de endpoints web procesan una solicitud web y producen una respuesta web.

Estos se utilizan para exponer la funcionalidad de un plugin de Clarive a través de la URL, por ejemplo, para crear un panel de control.

El controlador es el componente que envía los datos de respuesta del servidor a la interfaz.

Los controladores sólo se pueden crear en un plugin y deben formar parte de la fase de carga de un plugin.

Creación de un controlador

Para crear un controlador, simplemente cree un archivo fuente JS en el directorio init / de su plugin (CLARIVE_BASE/plugins/[plugin-name]/init/) y registre un nuevo controlador en él:

var reg = require('cla/reg');

reg.controller('foobar',{
    authenticate: false,
    handler: function(req,res){
        res.body( "hola mundo" );
    }
});

La función handler ejecuta en un nuevo entorno javascript en cada llamada, de modo que cualquier cosa definida fuera del alcance de la función handler se perderá en la próxima llamada.

Por ejemplo:

var reg = require('cla/reg');
var test = 'hola mundo';
reg.controller('foobar', {
    handler: function(req, res) {
        res.body(test); //error: identifier 'test' undefined
    }
});

Para evitar esta limitación, le recomendamos que coloque su lógica de complemento en un módulo aparte y luego requerirlo de la función handler.

Por ejemplo:

/* modules/handler.js */
var test = 'hola mundo';
var another = require('./another.js');
module.exports = function(req, res) {
    res.body(test);
};

/* init/myplugin.js */
var reg = require('cla/reg');
reg.controller('foobar', {
    handler: function() {
        return require('handler').apply(this, arguments);
    }
});

Esta técnica también le dará un mejor informe de errores con nombre de archivo y número de línea.

Controlador URL

Puede acceder a la URL del controlador en: http://clariveserver/plugin/[plugin-name]/[controller-name].

Por ejemplo, supongamos que creó plugin CLARIVE_BASE/plugins/myplugin/init/controllers.js y registró el siguiente controlador:

var reg = require('cla/reg');

reg.controller('foobar',{
    authenticate: false,
    handler: function(req,res){
        res.body( "hola " + req.username() );
        res.contentType('text/html');
    }
});

A continuación, puede acceder a este controlador en: http://clariveserver/plugin/myplugin/foobar

El handler del controlador pasar 2 argumentos, solicitudes y objetos de respuesta.

Objeto Request

Proporciona información acerca de la solicitud actual del cliente. El objeto request contiene Entrada de punto final web, y normalmente se envía por el navegador.

El objeto request es el primer argumento para un handler controlador, que en este documento será identificado como req.

req.args()

Contiene una matriz de partes de ruta, omitiendo la primera ruta ("plugin").

/plugin/myplugin/mycontroller/path/part/one

Dará como resultado el siguiente Array:

[ 'myplugin', 'mycontroller', 'path', 'part', 'one' ]

req.address()

Dirección IP del cliente.

req.contentType()

Atajo para el encabezado de cliente Content-Type.

req.contentLength()

Atajo para el encabezado de cliente Content-Length.

req.contentEncoding()

Atajo para el encabezado de cliente Content-Encoding.

req.cookie()

Este método devuelve todas las cookies como un objeto, con pares clave-valor. En contraste con req.cookie (), los valores son stringificados en lugar de objetos.

reg = require('cla/reg');

reg.controller('mycontroller',{
    handler: function(req,res){
        var mycookie = req.cookie()
        res.body(
            'name=' + cookie.name() +
            'value=' + cookie.value() +
            'path=' + cookie.path() +
            'expires=' + cookie.expires() +
            'maxAge=' + cookie.maxAge()
        );
    }
});

req.env()

Devuelve el entorno actual de la llamada.

req.header(headerkey)

Devuelve el valor de una clave de encabezado dada.

req.method()

Devuelve el método de solicitud, ie GET, POST, DELETE etc.

El método de solicitud es útil para distribuir diferentes comportamientos basados en el método solicitado, como al implementar interfaces REST.

req.param(key)

Devuelve la consulta de solicitud o el parámetro body (form) para la clave dada. Esto incluye los parámetros GET yPOST.

Ejemplo, para la siguiente solicitud de URL:

 http://servidor-clarive/plugin/miplugin/micontrolador?foo=bar

Utilizar:

print( req.param("foo") );

Para obtener el valor de foo bar.

req.protocol()

Devuelve el protocolo usado por la solicitud, tales como http o https.

req.query(key)

Devuelve el valor para el parámetro clave dado en una solicitud (de un GET).

Esto es similar a la función req.param () pero sólo devuelve los parámetros de la consulta, ignorando los parámetros del cuerpo

req.read([maxlength])

Utilice maxlength para limitar el número de bytes leídos. El valor predeterminado es el tamaño de la solicitud si no se especifica.

Devuelve undefined cuando el flujo ha terminado, por lo que es adecuado para ser utilizado en un bucle while ().

var str = '';
var ch;
while( ch = req.read(1) ) {
    str += ch;
}

req.remoteUser()

Devuelve al usuario remoto del encabezado.

req.secure()

Devuelve true o false, indicando si la conexión es segura (https).

req.remoteUser()

Devuelve el usuario remoto del encabezado.

req.secure()

Devuelve true o false, indicando si la conexión es segura (https).

req.uri()

Devuelve el objeto URI de la petición.

req.userAgent()

Devuelve el encabezado de solicitud del agente de usuario, que contiene la versión del navegador.

req.user()

Devuelve un objeto de usuario Clarive, que incluye los siguientes atributos:

    var user = req.user();
    user.ci(); // the CI object
    user.isRoot(); // true if a user has administrator permissions
    user.username(); // the username id string of the user logged into Clarive
    user.languages(); // returns an Array with the languages the user prefers
    user.hasAction('action.foo.bar'); // checks if user has a given action

req.username()

Devuelve el ID de usuario del usuario logueado en Clarive.

El Objeto de Respuesta

Sirviendo a JSON

Para enviar una respuesta JSON, use el método res.json (). Clarive se encargará de serializar y codificar los datos correctamente.

    handler: function(req,res){
        res.json({ aa: 100, bb: 200 });
    }

Servir Archivos

Respuesta Unicode