Skip to Content
0
Nov 12, 2018 at 11:37 AM

Package @sap/cds for Node.js

6363 Views

Hello folks,

I'm building an app on Cloud Platform (CF) using Node.js/Express. This thing has a /db module containing a entity definition (books-model.cds) and /srv that runs a node.js app on server.js that should read data declared on db module.

According to this documentation the package @sap/cds should help me do exactly that, using the statements below:

cds.importEntities([
    { $entity: "xsds.test.cds::ds_test.e1" },
    { $entity: "xsds.test.cds::ds_test.e2",
      $fields: {
          a: { $association: "xsds.test.cds::ds_test.e2",
               $viaBacklink: "b" }
      }
    }
], callback);
function callback(error, entities) {
    var E1 = entities["xsds.test.cds::ds_test.e1"];
    var E2 = entities["xsds.test.cds::ds_test.e2"];
    // ...
}

Thing is, @sap/cds module v2.10 doesn't seem to think that it is responsible for doing that. This version only handles the build and deployment of .cds files (to hdbcds et etc).

In a old version of this module, before going to npm repository, it was called "sap-cds" and it did provided this .importEntity method.

Does someone know what would be the equivalent of sap-cds on npm.sap.com, or even if it exists?

So far, I'm able to interact with the database using @sap/xsenv and @sap/hdbext.

import xsenv = require('@sap/xsenv') import hdbext = require('@sap/hdbext')    
const services = xsenv.getServices({ hana:'plcockpit-hdi' }) 

express.use('/', hdbext.middleware(services.hana))    
express.get('/', (req, res) => {
        req.db.exec('SELECT * FROM \"com.acme::MyLibrary.Books\"', function (err, rows) {
            res.json({
                result: JSON.stringify(rows[0])
            })
        })
    })

(Code is a simplified version of the original)

Although it works, I would like to know if is there a more "high-level" api to interact with the CDS layer.

Thanks