无法使用快速路由器和通行证呈现html:请求错误或找不到错误

时间:2019-01-23 23:49:40

标签: node.js passport.js express-router

我为express Router的{​​{1}}设置了一个url。在定义了/auth路由的文件中,我将发送整个/auth页面以启动我的html应用。在React页面中,我有许多静态资源必须引用html文件夹。不幸的是,这没有发生。我认为我需要为public文件本身另外重定向或设置静态资源。这是与Router文件相关的主要代码:

app.js

我正在var express = require('express'); var app = express(); app.use(express.static(path.join(__dirname, '/public/'))); app.use(express.static(__dirname + '/node_modules/')); var index = require('./routes/index'); app.use('/auth', index); 内提供一个index.js页面:

html

var express = require('express'); var router = express.Router(); var path = require('path'); router.get('/:id', function(req, res) { userAuthId = req.params.id; console.log(userAuthId); console.log("router of index.js is sending app.html"); var appPath = path.join(__dirname, '..', 'public', 'app.html'); res.sendFile(appPath); }); 文件中,重定向过程将在登录过程中发生到app.js。中间件启动了您可以在上面看到的/auth/:id方法,我看到了其中的router.get输出。但是,我收到console.log() 404错误。我检查了Not Found,它是正确的:我可以在浏览器中手动打开链接。因此,我认为这可能是页面本身上定义的静态资源的问题,但并不能完全确定。 appPath看起来像这样:

app.html

我也在使用<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="theme-color" content="#000000"> <!-- manifest.json provides metadata used when your web app is added to the homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/ --> <link rel="manifest" href="%PUBLIC_URL%/manifest.json"> <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> <link rel="stylesheet" href="/stylesheets/pretty-checkbox.min.css"> <link rel="stylesheet" href="/stylesheets/nv.d3.css"> <link rel="stylesheet" href="/stylesheets/autosuggest.css"> <link rel="stylesheet" href="/stylesheets/sidebar.css"> <link rel="stylesheet" href="/stylesheets/main.css"> <link rel="stylesheet" href="/stylesheets/distrochart.css"> <link rel="stylesheet" href="/stylesheets/gene-tree-chart.css"> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <title>React App</title> </head> <body> <noscript> You need to enable JavaScript to run this app. </noscript> <div id="root"></div> <!-- This HTML file is a template. If you open it directly in the browser, you will see an empty page. You can add webfonts, meta tags, or analytics to this file. The build step will place the bundled scripts into the <body> tag. To begin the development, run `npm start` or `yarn start`. To create a production bundle, use `npm run build` or `yarn build`. --> <script type="text/javascript" src="bundle.js" charset="utf-8"></script> <script type="text/javascript" src="cacheJS.js" charset="utf-8"></script> <script type="text/javascript" src="distrochart.js" charset="utf-8"></script> </body> </html> ,实际上需要具备以下条件:

passport

如果我这样做,我将得到重定向app.use('/auth', passport.authenticate(['facebook-token', 'local-signup']), index); 的错误400 Bad Request。任何建议将不胜感激。

以下内容也可能很有趣,重定向到/auth/:id的实际位置:

/auth/:id

因此,据我了解,由于发生重定向,app.post('/login', function(req, res, next) { passport.authenticate('local-signup', function(err, user, info) { console.log('passport callback'); console.log(err); console.log(info); if (err) { return next(err); } if (!user) { return res.status(401).json(info); } req.logIn(user, function(err) { console.log('logIn function of /login path'); if (err) { return next(err); } return res.redirect('/auth/' + user.local.username); }); })(req, res, next); console.log('end of login function'); }); 回调已成功完成。

  

更新

2个月过去了,我仍然无法使它工作。尝试放弃passport来做:

passport.authenticate

如此处建议:

https://github.com/jaredhanson/passport/issues/371

没有成功。我相信,我几乎可以在网上找到所有可能找到的东西,而且一切都没有用。我正在考虑完全放弃app.post('/login', function(req, res, next) { if(req.isAuthenticated()) { res.redirect('/auth/' + req.user.local.username); } return res.redirect('/login'); })

0 个答案:

没有答案