我下面有一个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 + '/');
});
答案 0 :(得分:1)
签出npm dotenv
。您可以在其中放置所有特定于环境的信息,而不必明确地键入自己的shell变量。
关闭腻子意味着您正在关闭连接。如果此操作杀死了pm2,则可能是pm2在前台运行,并且在连接关闭时,它将终止该过程。您的pm2守护程序正在运行吗? “应”为默认值,并且执行pm2 start app.js
应该将立即控制返回给命令行。
另外,我建议您将pm2ecosystem.json
文件用作起始文件。