Nodejs应用程序在本地运行良好,但在在线启动时出现问题

时间:2018-07-31 21:16:22

标签: node.js

我下面有一个nodejs应用程序。当我在本地运行它时,它工作正常。

这是我在本地运行应用程序的方式,并且运行正常。在提示符下

$ export CLIENT_ID=<your_client_id>
$ export CLIENT_SECRET=<your_client_secret>
$ export CALLBACK_URL="call-back-url-goes-here"
$ node app.js

现在我需要在两个不同的地方在线测试该应用程序

1。)在 mysite

2。)在 glitches.com

请注意,在mysite中,所有其他的nodejs应用程序都运行良好,因为正在使用 PM2 启动或停止nodejs应用程序

好的,这就是我在mysite上运行此应用程序的方式,并且只要Command shell(putty)仍处于打开状态,它就可以工作,但是如果关闭提示(putty),则所有导出的变量(Client_id,client_secret,callback_url)都将是丢失或变得不确定

$ export CLIENT_ID=<your_client_id>
    $ export CLIENT_SECRET=<your_client_secret>
    $ export CALLBACK_URL="call-back-url-goes-here"
    $ pm2 start app.js

这可能是解决方案。有什么办法可以将所有导出变量(Client_id,client_secret,callback_url)集成到 app.js 应用程序中,以便我可以使用pm2来启动我的nodejs应用程序像往常一样还是有其他方法可以解决此问题。我还计划在 glitches.com 上对其进行测试。 有人可以帮我解决这个问题。

下面是代码谢谢

const express = require('express');
const session = require('express-session');
const gMore = require('gMore-node');

const app = express();
app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');


app.use(session({
  secret: 'YOURSECRET',
  resave: false,
  saveUninitialized: true,
  cookie: {
    maxAge: 30 * 60 * 1000
  }
}));

app.get('/', async (req, res) => {
 const scope = 'report:data_to_fetch';

  const authorizeUrl = genomeLink.OAuth.authorizeUrl({ scope: scope });

  // Fetching a protected resource using an OAuth2 token if exists.
  let reports = [];
  if (req.session.oauthToken) {
    const scopes = scope.split(' ');
    reports = await Promise.all(scopes.map( async (name) => {
      return await gMore.Report.fetch({
        name: name.replace(/report:/g, ''),
        population: 'european',
        token: req.session.oauthToken
      });
    }));
  }

  res.render('index.html', {
    authorize_url: authorizeUrl,
    reports: reports,
  });
});

app.get('/callback', async (req, res) => {
  req.session.oauthToken = await gMore.OAuth.token({ requestUrl: req.url });
  res.redirect('/');
});

// I can change the port on production 3000
const port = process.env.PORT || 3000;
const server = app.listen(port, function () {
  console.log('Server running at http://mysite:' + port + '/');
});

1 个答案:

答案 0 :(得分:1)

  1. 签出npm dotenv。您可以在其中放置所有特定于环境的信息,而不必明确地键入自己的shell变量。

  2. 关闭腻子意味着您正在关闭连接。如果此操作杀死了pm2,则可能是pm2在前台运行,并且在连接关闭时,它将终止该过程。您的pm2守护程序正在运行吗? “应”为默认值,并且执行pm2 start app.js应该将立即控制返回给命令行。 另外,我建议您将pm2ecosystem.json文件用作起始文件。