需要帮助在 nodejs 中调试我的 webapp

Posted

技术标签:

【中文标题】需要帮助在 nodejs 中调试我的 webapp【英文标题】:Need help debugging my webapp in nodejs 【发布时间】:2018-10-20 01:58:09 【问题描述】:

我通过开发谷歌策略在passport.js的帮助下在nodejs中使用google outh2。但是,当我在任何文件的代码中的任何位置使用 console.log 时,问题就出现了,无论它在 Web 应用程序目录中的工作是什么文件。但是当我在这个函数中使用我的 console.log 时,没有任何东西被执行,我既不能获取用户数据,也不能执行 console.log 来在控制台中显示一条消息,当在这段代码中执行时

(accessToken, refreshToken, profile, done) => 
console.log('data');
)

完整代码在这里: 文件:passport-setup.js

var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
passport.use(new GoogleStrategy(
    clientID: "",
    clientSecret: "",
    callbackURL: "http://127.0.0.1:3000/auth/google/redirect"
  ,
  function(accessToken, refreshToken, profile, done) 

  console.log('logineed');
  
));

路线: index.js

var express = require('express');
var passport = require('passport');
var router = express.Router();

router.get('/login', function(req, res, next) 
  res.render('index',  title: 'Login' );
);
router.get('/google',passport.authenticate('google',  scope: ['profile'] ));

router.get('/google/redirect',  function(req,res)
    res.redirect('/app');
);
router.get('/app',function(req,res)
  res.send('Your are in');
);
module.exports = router;

入口点: app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var passportConfig = require('./config/passport-setup');
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded( extended: false ));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/auth', indexRouter);
app.use('/app', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) 
  next(createError(404));
);

// error handler
app.use(function(err, req, res, next) 
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : ;

  // render the error page
  res.status(err.status || 500);
  res.render('error');
);

module.exports = app;

【问题讨论】:

【参考方案1】:

您似乎没有将护照初始化为 Express 的中间件。

尝试将此添加到 app.js

app.use(passport.initialize());

【讨论】:

【参考方案2】:

问题出在代码上

router.get('/google/redirect',  function(req,res)
    res.redirect('/app');
);

在 router.js 文件中

我们应该这样写

router.get('/google/redirect', passport.authenticate('google'),  function(req,res)
    res.redirect('/app');
);

因为发生在登录时,在链接重定向发生之前,该人的谷歌数据是可访问的。但在重定向后,所有对谷歌帐户数据的数据访问都将丢失。要再次访问它,我们将使用谷歌策略调用护照的身份验证功能,这将加载谷歌用户数据。如上面代码中给出的

【讨论】:

以上是关于需要帮助在 nodejs 中调试我的 webapp的主要内容,如果未能解决你的问题,请参考以下文章

如何在 nodeJs 中使用 nodemon 调试应用程序

Azure Database for MySQL - webapp nodejs

无法在 docker 中调试 nodejs 应用程序

使用nodejs的代理

Chrome真机调试webapp

Chrome真机调试webapp