【问题标题】:Trying to set up Node authentication with express and passport尝试使用 express 和 passport 设置节点身份验证
【发布时间】:2017-06-05 07:45:30
【问题描述】:

我目前正在尝试使用 node.js 和护照构建一个简单的用户身份验证系统,并为预定的 SMS 应用程序快递;但是,当尝试初始化服务器时,无论我搜索并尝试了哪些修复组合,cmdPrompt 都会继续呈现

$ node appauth C:\Users\zobri\uabcprojects\nodeauth\node_modules\express\lib\router\index.js:458 throw new TypeError('Router.use() 需要中间件函数但得到了一个 ' + gettype(fn)); ^

我不知道为什么...我一直在关注教程,但似乎无法弄清楚到底发生了什么 - 任何帮助将不胜感激! 罗伯特

我的代码:

const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const expHandlebars = require('express-handlebars');
const expValidator = require('express-validator');
const expSession = require('express-session');
const flash = require('connect-flash');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const database = require('mongodb');
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/appAuth');
const db = mongoose.connection;



// routes 
const routes = require('./routes/index');
const users = require('./routes/users');

// initialize application
const app = express();

// view engine 
app.set('views', path.join(__dirname, 'views'));
app.engine('handlebars', expHandlebars({ defaultLayout: 'layout' }));
app.set('view engine', 'handlebars');

// body-parser middleware 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

// set static directory 
app.use(express.static(path.join(__dirname, 'public')));

// express session
app.use(expSession({
     secret: 'rddremind',
     proxy: true,
     resave: true,
     saveUninitialized: true

}));

// passport init
app.use(passport.initialize());
app.use(passport.session());

// express validator (code snippet courtesy of 'https://github.com/ctavan/express-validator')\\

app.use(expValidator({
     errorFormatter: function(param, msg, value) {
          var namespace = param.split('.'),
               root = namespace.shift(),
               formParam = root;

          while (namespace.length) {
               formParam += '[' + namespace.shift() + ']';
          }
          return {
               param: formParam,
               msg: msg,
               value: value
          };
     }
}));

// connect flash 
app.use(flash());

// Global variables 
app.use(function(req, res, next) {
          res.locals.success_msg = req.flash('success_msg');
          res.locals.error_msg = req.flash('error_msg');
          res.locals.error = req.flash('error');
          next();

     }),

     app.use('/', routes);
app.use('/users', users);

// set Port
app.set('port', (proccess.env.PORT || 8081));

app.listen(app.get('port'), function() {
     console.log('Server initialized on port ' + app.get('port'));
});

【问题讨论】:

  • 458是哪一行?
  • @CharlieFish - 我没有编写那么多行代码,我在这个目录中也没有一个名为 index 的本地文件...必须是 NPM 代码
  • 到目前为止你尝试过什么?
  • 另外请阅读this link,因为您没有遵循 Stack Overflow 指南。
  • 抱歉,@CharlieFish - 我是编码新手,总共大约 90 天...

标签: node.js express passport.js


【解决方案1】:
app.use('/', routes);
app.use('/users', users);

这两行不正确。您不想使用中间件来设置路由。

require('./app/routefile1.js')(app, passport);
require('./app/routefile2.js')(app, passport);

为了设置我的路线,我使用了上面的代码。当然替换为您的路径。如果你使用这种方法,你不应该也需要下面的两行。

const routes = require('./routes/index');
const users = require('./routes/users');

使用代码时,一个好的调试技巧是开始删除代码或将其注释掉,直到您将问题缩小到代码的特定部分。然后从那里开始工作。

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2018-04-16
    • 2015-05-18
    • 2017-07-02
    相关资源
    最近更新 更多