Search code examples
mysqlnode.jsloopbackjsstrongloop

Execute raw query on MySQL Loopback Connector


How is it possible to execute raw query and expose results through REST API with strongloop?

I've read something about using hooks and dataSource.connector.query() but I cannot find any working examples.


Solution

  • Here is a basic example. If you have a Product model (/common/models/product.json), extend the model by adding a /common/models/product.js file:

    module.exports = function(Product) {
    
        Product.byCategory = function (category, cb) {
    
            var ds = Product.dataSource;
            var sql = "SELECT * FROM products WHERE category=?";
    
            ds.connector.query(sql, category, function (err, products) {
    
                if (err) console.error(err);
    
                cb(err, products);
    
            });
    
        };
    
        Product.remoteMethod(
            'byCategory',
            {
                http: { verb: 'get' },
                description: 'Get list of products by category',
                accepts: { arg: 'category', type: 'string' },
                returns: { arg: 'data', type: ['Product'], root: true }
            }
        );
    
    };
    

    This will create the following endpoint example: GET /Products/byCategory?group=computers

    http://docs.strongloop.com/display/public/LB/Executing+native+SQL