简体   繁体   中英

Simple API.AI node.js webhook crashes on Heroku

I try to get my feet wet implementing a simply webhook for Google's NLP API.AI interface. I want to use Heroku as the server using node.js. The problem is that I can build and deploy the code on Heroku but the execution fails immediately.

Extract from the build log (note that the "real name" app is not test, I just changed it for this post)

[...]
2017-07-21T13:28:57.000000+00:00 app[api]: Build succeeded
2017-07-21T13:29:07.012028+00:00 heroku[web.1]: Starting process with command `npm start`
2017-07-21T13:29:10.516218+00:00 app[web.1]: 
2017-07-21T13:29:10.516234+00:00 app[web.1]: > test@0.0.3 start /app
2017-07-21T13:29:10.516235+00:00 app[web.1]: > node app.js
2017-07-21T13:29:10.516236+00:00 app[web.1]: 
2017-07-21T13:29:11.076809+00:00 heroku[web.1]: State changed from starting to crashed

I have tried many different versions of code but even this code which is reduced to pretty much nothing fails to execute.

Here is my app.js:

'use strict';

 process.env.DEBUG = 'actions-on-google:*';
 const ApiAiApp = require('actions-on-google').ApiAiApp;

 const test = function(request, response) {
 // todo
};

module.exports = {
  test
};

And this is the package.json file:

{
  "name": "test",
  "description": "virtual scrum master",
  "version": "0.0.3",
  "private": true,
  "license": "Apache Version 2.0",
  "author": "Google Inc.",
  "scripts": {
    "lint": "semistandard --fix \"**/*.js\"",
    "start": "node app.js",
    "monitor": "nodemon app.js",
    "deploy": "gcloud app deploy"
  },
  "engines": {
    "node": "6.11.1"
  },
  "dependencies": {
    "actions-on-google": "^1.0.0"    
  },
  "devDependencies": {
    "semistandard": "^9.1.0"
  }
}

After a log of searching I found the correct setup.

Here is the correct app.js code:

'use strict';

process.env.DEBUG = 'actions-on-google:*';
let Assistant = require('actions-on-google').ApiAiAssistant;
let bodyParser = require('body-parser');

let app = express();
app.use(bodyParser.json({type: 'application/json'}));

app.post('/', function (req, res) {

// Todo

});

if (module === require.main) {
  // Start the server
  let server = app.listen(process.env.PORT || 8080, function () {
    let port = server.address().port;
    console.log('App listening on port %s', port);
  });
}

module.exports = app;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM