我部署了一个 Nodejs 应用程序,到目前为止它的后端是 Heroku。我在浏览器中收到应用程序错误。当我跑步时heroku logs
,我看到这个错误:
Error: Cannot find module './config/keys'
所以我运行一个heroku run 'ls -al'
我看到这个:
Running ls -al on ⬢ murmuring-temple-46226... up, run.3327 (Free)
total 284
drwx------ 8 u6811 dyno 4096 Apr 21 11:41 .
drwxr-xr-x 15 root root 4096 Apr 18 13:09 ..
-rw------- 1 u6811 dyno 21 Apr 21 11:37 .gitignore
drwx------ 3 u6811 dyno 4096 Apr 21 11:37 .heroku
drwx------ 2 u6811 dyno 4096 Apr 21 11:37 .profile.d
-rw------- 1 u6811 dyno 0 Apr 21 11:37 @1
-rw------- 1 u6811 dyno 574 Apr 21 11:37 index.js
drwx------ 2 u6811 dyno 4096 Apr 21 11:37 models
drwx------ 261 u6811 dyno 12288 Apr 21 11:38 node_modules
-rw------- 1 u6811 dyno 235090 Apr 21 11:37 package-lock.json
-rw------- 1 u6811 dyno 565 Apr 21 11:37 package.json
drwx------ 2 u6811 dyno 4096 Apr 21 11:37 routes
drwx------ 2 u6811 dyno 4096 Apr 21 11:37 services
我确实看到我的config
文件夹不在顶部的文件和文件夹列表中,但这可能是因为在我的.gitignore
文件,我有它,所以它会忽略keys.js
文件,或者可能是我在代码库中引用了错误?
这就是我需要的方式index.js
:
const express = require('express');
const mongoose = require('mongoose');
const cookieSession = require('cookie-session');
const passport = require('passport');
const keys = require('./config/keys');
require('./models/User');
require('./services/passport');
mongoose.connect(keys.mongoURI);
const app = express();
app.use(
cookieSession({
maxAge: 30 * 24 * 60 * 60 * 1000,
keys: [keys.cookieKey]
})
);
app.use(passport.initialize());
app.use(passport.session());
require('./routes/authRoutes')(app);
const PORT = process.env.PORT || 5000;
app.listen(PORT);
这就是我在中引用它的方式services/passport.js
:
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const mongoose = require('mongoose');
const keys = require('../config/keys');
const User = mongoose.model('users');
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
done(null, user);
});
});
// passport.use() is a generic register to make Passport
// aware of new strategy
// creates a new instance to authenticate users
passport.use(
new GoogleStrategy(
{
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
callbackURL: '/auth/google/callback'
},
(accessToken, refreshToken, profile, done) => {
User.findOne({ googleId: profile.id }).then(existingUser => {
if (existingUser) {
// we already have a record with given profile id
done(null, existingUser);
} else {
// we dont have a user record with this id, make a new record
new User({ googleId: profile.id })
.save()
.then(user => done(null, user));
}
});
}
)
);
使用以下命令将应用程序成功部署到 Heroku 的最佳实践是什么?config/keys.js
包含 API 密钥和其他凭证的文件夹文件结构?