[英]redirect relative path Express.js goes wrong
重定向方法无法正常工作。 它无法获得具有相对路径的页面。 如果绝对正确的话。 如https://www.google.com 。 但是当我把相对路径index.html与post.html目录相同时。 它无法获取它。 从代码(如果输入表单值为admin),它将页面重定向到index.html
节点脚本
const express = require('express');
const app = express();
const http = require('http').Server(app);
const bodyParser = require('body-parser');
app.use(express.urlencoded({ extended: true }));
app.get('/', (req, res) => res.sendFile(__dirname + '/post.html'));
app.post('/', function(req, res){
var username = req.body.username;
if(username == 'admin'){
res.redirect(__dirname + '/index.html');
}
res.end();
});
http.listen(80, function(){
console.log('Listening on *:80');
});
HTML脚本
<!DOCTYPE html>
<html>
<head>
<title>My First Application</title>
</head>
<body>
<form method="post">
<input type="text" placeholder="username" name="username"><br>
<input type="submit">
</form>
</body>
</html>
首先,您需要将index.html
文件公开给客户端,现在,它们只能访问post.html
。
为此,您可以为索引页面添加新的路由,也可以使用express.static()
来提供文件。
如果要使用第一个解决方案,请添加以下路由:
app.get('/index', (req, res) => res.sendFile(__dirname + '/index.html'));
然后在下一个块中重定向到它:
app.post('/', function(req, res){
var username = req.body.username;
if(username == 'admin'){
res.redirect('/index');
}
res.end();
});
如果您想使用express.static()
,这是您要这样做的方式:
将您希望客户端访问的文件放在应用程序的根目录(节点脚本所在的目录)中的另一个目录(通常称为“公共”)中。 之后,使用express.static()
函数让Express像Apache Server一样为目录提供服务:
app.use(express.static(__dirname + 'public'))
之后,您可以将客户端重定向到/index.html
app.post('/', function(req, res){
var username = req.body.username;
if(username == 'admin'){
res.redirect('/index.html');
}
res.end();
});
我认为您不了解redirect
工作原理。 只需查看说明文件expressjs.com#res.redirect即可 。 在那里您可以发现只能将redirect
方法用于从一条路径移动到另一条路径。
无论如何,您使用不正确。
此代码无效: res.redirect(__dirname + '/index.html');
/ res.redirect(__dirname + '/index.html');
__dirname + '/index.html'
就像这样:
"C:/some/crazy/path/index.html"
现在,这将被发送到客户端。 而且,出于充分的理由,这不能仅仅通过有线访问本地文件系统。 因此,与其重定向到某个文件(不起作用),不如重定向到您的服务器托管的url(提示: index.html
是没有路由):
res.redirect("/");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.