Instructions to run feathers completely from console, no coding!
IMPORTANT: open up a new tab “about:blank”
Click to open a new about:blank page.
Load the libraries
/* load in libraries */
[ 'https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js'
, 'https://unpkg.com/@feathersjs/client@^3.0.0/dist/feathers.js'
].forEach( (src) => {
    let script = document.createElement('script'); 
            // script.setAttribute('crossOrigin',  'anonymous' );  /* optional  */
    script.src =  src;
            // script.type = 'javascript';   /*optional  */
    script.src = src; 
    script.async = false;
    document.head.appendChild(script); // or  document.getElementsByTagName('script')[0];
});
alternative method:
/usr/bin/cat <<END | ncat --listen 80 ; <!DOCTYPE html> <html lang="en-us"> <head> <script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js'></script> <script src='https://unpkg.com/@feathersjs/client@^3.0.0/dist/feathers.js'></script> </head> <body> fake webserver page. include extra jScript code in the console. </body> </html> END
initialize constants
/* initialize constants */
const app = feathers();
const socket = io();   /*  defaults to:    const socket = io('ws://localhost:3030');    */
const socket = io('ws://###.###.###.###:3030');   /*if we need to connect to different host */
app.configure(feathers.socketio(socket));     /* PLEASE dont skip this one!!  */
/*   -- or --   */
app.configure(feathers.socketio(io('ws://###.###.###.###:3030')));  /* just combine the last two lines */
create(POST)
/* create(POST) */
async function createTiny(name, address) {
let createResult
      = await app.service(‘tiny-connect’).create({ name: name, address: address });
    console.log(‘createTiny function result: ‘ + JSON.stringify(createResult) );
    return createResult;
};
createTiny(‘Mark Edwards’, ’123 Swallow Lane’).then((value) => { /* create(POST) */
    console.log(‘createTiny: ‘ + JSON.stringify(value));
})
get(GET) just one using the primary index
/* get(GET) (just one by index) */ async function getTiny(id) { return await app.service(‘tiny-connect’).get(id); }; —- or —- async function getTiny(id) { let getResult = await app.service(‘tiny-connect’).get(id); console.log(‘getTiny function: ‘ + JSON.stringify(getResult) ); return getResult; }; let getTinyResult = null; let key = 1; // assuming your row ID is one getTiny(key).then( value => { /* get(GET) */ getTinyResult = value; console.log(‘getTiny(’ + key + ‘) : ‘ + JSON.stringify(getTinyResult) ); }); /* one line test: */ (async () => { try { let result = await app.service(‘stimword’).get(1) ; console.log(‘the result is: ‘ + JSON.stringify(result)) } catch (e) { console.log(e); } } )() ; /* or: */ (async () => { let logoutResult = await app.service(‘stimword’).get(2); console.log(logoutResult); })().catch(e => { console.log(e) });
find(GET) all or by query
/* find(GET) (get all or by query) */async function findTiny(query) { return await app.service(‘tiny-connect’).find(query);
let findTinyResultOne; let findDataObject = { ‘query’ :{ id: 0}}; // again, assuming your id is zero! findTiny(findDataObject).then((value) => { /* find(GET) (with data ) */ findTinyResultOne = value; console.log(‘findTiny with query: ‘ + JSON.stringify(findTinyResultOne) ); }); /* shortcut examples: */ (async () => { try { let result = await app.service(‘stimword’).find() ; console.log(‘the result is: ‘ + JSON.stringify(result)) } catch (e) { console.log(e); } } ) () ; (async () => { try { let result = await app.service(‘stimword’).find({‘query’:{‘stimwordWord’:‘horse’}}) ; console.log(‘the result is: ‘ + JSON.stringify(result)) } catch (e) { console.log(e); } } ) () ;
};
async function findTiny(query) { console.log(‘Query function using: ‘ + JSON.stringify(query) ); let findResult = await app.service(‘tiny-connect’).find(query); console.log(‘findTiny function: ‘ + JSON.stringify(findResult) ); return findResult;
};
let findTinyResultAll;
findTiny(null).then((value) => { /* find(GET) (find all) */ findTinyResultAll = value; console.log(‘findTiny without query: ‘ + JSON.stringify(findTinyResultAll) );
});
Accessing a KNEX RAW selecxt
     SELECT    JSON_ARRAYAGG(
                  JSON_OBJECT(
                      ..........
                  )
                )  'JSON_ARRAYAGG'
  .....................................
const result = await knex.raw( sqlStatement, sqlQuery);
return result[0][0].JSON_ARRAYAGG   ;
...................................
var newResult;
(async () => { try { let result = await  app.service('raw-service').find({query: sqlQuery}) ; newResult = result; } catch (e) { console.log(e); }  } )() ;
console.log(JSON.parse(newResult));
patch(PATCH) to update row(s)
/* patch(PATCH) */async function patchTiny(id, data, params) { /* patch(PATCH) */ let patchResult = await app.service(‘tiny-connect’).patch(id, data, params); console.log(‘patchTiny function: ‘ + JSON.stringify(patchResult) ); return patchResult;
let patchResult = null; let patchKey = 0; let patchData = {address: ’5678 There Street!’ }; patchTiny(patchKey, patchData ).then( value => { /* patch(PATCH) */ patchResult = value; console.log(‘patchResult: ‘ + JSON.stringify(patchResult)); });
};
combine create and insert into one promise
async function clientMasterCreate(query) {    
  return await app.service(‘client-master’).create(query); 
};
async function clientMasterFind(query) {    
  return await app.service(‘client-master’).find( { ‘query’ : query } ); 
};
clientMasterObj =	{  ‘layoutName’	       : ‘PESL’
			,  ‘teacherEmail’      : ‘info@englishwithoutaccent.com’
		        , ‘teacherAutoIncr’    : 385
			,  ‘clientMasterEmail’ : ‘12yukos@gmail.comX’
			};
clientMasterFind(clientMasterObj)
    .then( (clientMasterRow) =>	{
        return clientMasterRow
    })
    .then( (clientMasterRow) => {
  	    if  ( clientMasterRow.data.length == 0 ) {
		    return    clientMasterCreate(clientMasterObj)
                 .then( (clientMasterRow) => {
                     console.log(‘inserting: ‘ + clientMasterRow.clientMasterAutoIncr );
                     return  clientMasterRow.clientMasterAutoIncr;
            })
        } else {
            	return clientMasterRow.data[clientMasterRow.data.length-1].clientMasterAutoIncr;
        }
    })
    .then ((result) =>	{
  	    console.log(‘clientMasterAutoIncr: ‘ + result)
    });