Error-while running node application in APIGEE edg. "Script node executed prematurely

rm11
New Member

When I try to execute the below node js I am getting error when I try to fetch file from S3 bucket to apigee.

Code as follows:

var aws = require('aws-sdk');
var csv = require('csvtojson');
var http = require('http');
var apigee = require('apigee-access');
var request = require('request');
var express = require('express');
var bodyParser = require('body-parser');
var tempJson = require('./data.json');
var dataManager = require('./dataManager');
var app = express();
  app.post('/tempLoad', function(req,res){
    var dbset = apigee.getVariable(req, "request.queryparam.dbset");
var accessKeyId=apigee.getVariable(req, "s3_accessKeyId");
var secretAccessKey=apigee.getVariable(req, "s3_secretAccessKey");
var s3Bucket=apigee.getVariable(req, "s3_bucket");
var access_token=apigee.getVariable(req, "access_token");
var app_name=apigee.getVariable(req, "private.baasAppName");
var fileName=apigee.getVariable(req, "Filename_DailySales");
    var Temp_DailySales=apigee.getVariable(req,"Temp_DailySales");
    var BaaSURL=(req, "private.BaaSURL");
aws.config.update({
"accessKeyId": accessKeyId,
"secretAccessKey": secretAccessKey
});
var s3 = new aws.S3({ "apiVersion": '2006-03-01' });
var bucket = s3Bucket;
    var key = fileName+".csv";
    var params = {
        Bucket: bucket,
        Key: key,
    };          
    s3.getObject(params, function(err, data){
        if (err) {
            console.log(err);
            res.status(500);
           res.send(err);
        } 
else {
var jsonOutput;
            var output = data.Body.toString("utf-8");
            var Converter = csv.Converter;
            var converter = new Converter({});
            converter.fromString(output,function(err,result){
                jsonOutput = result;
                var uri = "https://"+BaaSURL+"/"+app_name+"/"+Temp_DailySales+"_"+dbset+"?access_token="+access_token;
                dataManager.makeRequest(jsonOutput,access_token, uri, function(error,body){
                    if(error){
                        console.log("error = "+error);
                    }
else{
                        console.log("body = "+body);
                    }
                    res.send("done");
                });
});
        } 
});
});
app.listen(process.env.PORT || 9000);

,When I try to execute I am getting error like this. what should I do for this

{
    "fault": {
        "faultstring": "Script node executed prematurely: syntax error\nsyntax error\n    at module.js:439\n    at module.js:474\n    at module.js:356\n    at module.js:312\n    at module.js:364\n    at require (module.js:380)\n    at /organization/environment/api/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js:5\n    at module.js:456\n    at module.js:474\n    at module.js:356\n    at module.js:312\n    at module.js:364\n    at require (module.js:380)\n    at /organization/environment/api/node_modules/request/node_modules/hawk/lib/index.js:5\n    at module.js:456\n    at module.js:474\n    at module.js:356\n    at module.js:312\n    at module.js:364\n    at require (module.js:380)\n    at /organization/environment/api/node_modules/request/request.js:9\n    at module.js:456\n    at module.js:474\n    at module.js:356\n    at module.js:312\n    at module.js:364\n    at require (module.js:380)\n    at /organization/environment/api/node_modules/request/index.js:143\n    at module.js:456\n    at module.js:474\n    at module.js:356\n    at module.js:312\n    at module.js:364\n    at require (module.js:380)\n    at /organization/environment/api/index.js:5\n    at module.js:456\n    at module.js:474\n    at module.js:356\n    at module.js:312\n    at module.js:497\n    at startup (trireme.js:142)\n    at trireme.js:923\n",
        "detail": {
            "errorcode": "scripts.node.runtime.ScriptExitedError"
        }
    }
}
0 5 261
5 REPLIES 5

Hi @Reshma ,

So the error seems to be thrown from a sub-dependency of request. I don't actually see that you're even using `request` at all. Is it a peer dependency per chance? Or is it possible that you don't even need it?

I did not get what you told.

In your script here you have a requirement for request, but I don't actually see that you're using the request module at all.

As @Jeremy Whitlock noted there's a transitive dependency on boom from request that may be the source of your issue ...

I *do* see that you're using a local include called `dataManager` and based on a call further down that may be where you're using the request module to make an http-call... I'd suggest swapping out the request module with `node-fetch` or simply requiring an older version of the request module.

This is the cause: https://github.com/hapijs/boom/blob/master/package.json#L12 It looks like boom, a transitive dependency, is requiring a newer version of node to use newer JS syntax.

rm11
New Member

package.json file

{
  "name": "csvreader",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "engines":{
      "node": ">=8.9.0"
  },
  "dependencies": {
    "apigee-access": "^1.3.0",
    "aws-sdk": "^2.9.0",
    "csvtojson": "^1.1.3",
    "http": "0.0.0",
    "request": "^2.65.0",
    "express": "^4.13.3",
    "body-parser": "^1.14.1",
    "async": "^2.3.0"
  }
}