更新:为我的successRedirect使用不同的路径我设法获得了对我的GET请求的200响应(请参阅下面的代码)。不过,这只是我第一次上路的时间。即便如此,浏览器也不会更改呈现的页面。即在我成功注册虚拟用户后,没有实际的重定向。
经过一些关于代码304的更多研究以及一些播放它似乎是一个缓存问题,但就我迄今为止所做的那样。
GET / test
app.get('/test', function(req, res) {
res.render('video-view.html');
});
// process the signup form
app.post('/signup', passport.authenticate('local-signup', {
successRedirect : '/test', // redirect to the secure profile section
failureRedirect : '/sign-up', // redirect back to the signup page if there is an error
failureFlash : true // allow flash messages
}));
在成功进行本地注册后,我的路由器在正确重定向方面遇到了很多麻烦。我的/config/passport.js文件正确地向数据库添加了一行,并显示为序列化会话。它将用户返回到我的路由器,该路由器尝试重定向浏览器。查看我的控制台请求,我看到这个不成功的请求:GET / home 304。
我已经在这方面工作了很长一段时间,并且无法找到解决方案或解决问题。我的部分问题是我没有使用模板引擎 - 只提供用angular.js编写脚本的html。也许我还没有正确配置,但所有其他路由和功能都运行良好。有什么想法吗?
这是我的路由器代码:
var express = require('express');
module.exports = function(app, passport) {
app.get('/signup', function(req, res) {
// render the page and pass in any flash data if it exists
res.render('sign-up.html');
});
app.get('/home', function(req, res) {
res.render('video-view.html');
});
app.post('/signup', passport.authenticate('local-signup', {
successRedirect : '/home', // redirect to the secure profile section
failureRedirect : '/signup', // redirect back to the signup page if there is an error
failureFlash : true // allow flash messages
}));
};
我的服务器设置如下:
var express = require('express');
var app = express();
var port = process.env.PORT || 8080;
var passport = require('passport');
var flash = require('connect-flash');
require('./config/passport')(passport); // pass passport for configuration
app.configure(function() {
app.use(express.logger('dev')); // log every request to the console
app.use(express.cookieParser()); // read cookies (needed for auth)
app.use(express.bodyParser()); // get information from html forms
app.engine('html', require('ejs').renderFile);
app.use('/', express.static(__dirname + '/views'));
app.use(express.session({ secret: 'vidyapathaisalwaysrunning' } )); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session
});
require('./app/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport
app.listen(port);
答案 0 :(得分:4)
已解决:令人惊讶的是,问题是由视图中的代码引起的。
这是我之前和之后的技术:
在使用下面的Angular.js之前 登入up.html
<div class="col-xs-6" id="register">
<p> Enter Username </p>
<input type="text" ng-model="username"/>
<p> Enter Password </p>
<input type="text" ng-model="password"/>
<input type="button" ng-click="register()">
</div>
controller.js
$scope.register = function(){
var send = {'username': $scope.username,
'password': $scope.password};
$http.post('/signup', send);
};
我认为这不起作用的原因是浏览器不知道等待节点的响应。不是积极的,但我最好的猜测是,这个问题可以通过Angular中的承诺来解决。
我解决了重定向问题,将角度排除在等式之外,并使用html中的表单处理POST。这是工作代码,不改变服务器端:
登录up.html
<form action="/signup" method="post">
<input type="text" name="username" />
<input type="text" name="password" />
<button type="submit" id="enter" value="ENTER" />
</form>
答案 1 :(得分:0)
我认为回家304不一定是错误的。它告诉你它正在获取页面,但我相信它没有改变。我认为这个问题就是你送回来的。我不熟悉ejs的工作原理,但你只是想渲染一个html页面吗?然后你应该使用sendFile我相信,而不是渲染。
15 Oct 01:25:24 - [nodemon] starting `node ./bin/www`
GET / 200 826.199 ms - 11667
GET /js/lib/bootstrap.min.js 304 3.557 ms - -
GET /js/lib/metisMenu.min.js 304 2.810 ms - -
GET /js/lib/morris.min.js 304 0.607 ms - -
GET /js/lib/raphael.min.js 304 1.195 ms - -
GET /js/lib/sb-admin-2.js 304 0.522 ms - -
GET /js/lib/angular/angular-bootstrap.min.js 304 1.334 ms - -
GET /js/app/app.js 304 2.389 ms - -
GET / 200 366.541 ms - 11667
GET /css/bootstrap/bootstrap.min.css 304 1.078 ms - -
GET /css/mm/metisMenu.min.css 304 1.264 ms - -
GET /css/sb-admin-2.css 304 0.955 ms - -
GET /css/morris.css 304 0.739 ms - -
GET /css/font-awesome.min.css 304 1.277 ms - -
....
这显示它正在使路线正常。 /。都很好。 / route现在说在渲染html(它只是驻留在/)时获取所有这些js文件。这些都是304因为它们永远不会改变。您发送文件的方式可能有误。