The last tutorial covered customizing table names using the generator.ADD_TABLE event. There's also a generator.ADD_COLUMN event that allows developers to add custom mappings for columns names, and also to add column converters.
If you have not reviewed the Ad-Hoc Converters tutorial, you should do so now. Building on that example, here's how one can add a BooleanConverter to all BIT-type fields.
'use strict'; const MySQLDriver = require('node-data-mapper-mysql').MySQLDriver; const driver = new MySQLDriver(require('../bikeShopConOpts.json')); const util = require('util'); // This converter converts from database bits to JavaScript booleans. const booleanConverter = require('node-data-mapper').booleanConverter; // Listen for ADD_COLUMN events and add converters as needed. driver.generator.on('ADD_COLUMN', onAddColumn); driver .initialize() .then(runQuery) .then(printResult) .catch(console.error) .finally(() => driver.end()); function runQuery(dataContext) { // Pull all staff members. return dataContext .from('staff s') .select('s.staffID', 's.firstName', 's.hasStoreKeys') .execute(); } function printResult(result) { // Note that hasStoreKeys is converted from a Buffer to a boolean. console.log(util.inspect(result, {depth: null})); } /** * Add a converter to BIT columns that converts to boolean. */ function onAddColumn(col, table) { if (col.dataType === 'bit') { col.converter = booleanConverter; } }
The example prints the following output ($ node example/schema/converters.js):
{ staff: [ { staffID: 1, firstName: 'Randy', hasStoreKeys: false }, { staffID: 2, firstName: 'John', hasStoreKeys: true }, { staffID: 3, firstName: 'Tina', hasStoreKeys: false }, { staffID: 4, firstName: 'Abe', hasStoreKeys: true }, { staffID: 5, firstName: 'Sal', hasStoreKeys: true }, { staffID: 6, firstName: 'Valerie', hasStoreKeys: true }, { staffID: 7, firstName: 'Kimberly', hasStoreKeys: false }, { staffID: 8, firstName: 'Michael', hasStoreKeys: false } ] }
Notice that the hasStoreKeys is converted to a boolean.