繁体   English   中英

重定向相对路径Express.js出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM