我是Node和Express的新手。 我有一个静态的html页面,用户通过ajax将他的用户名发布到我的服务器上。然后我想将他重定向到另一个html文件。
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(__dirname + "/public/arena.html"));
app.get('/',function(req,res){
res.sendFile(__dirname + "/public/index.html");
});
app.post('/login',function(req,res){
var username=req.body.username;
console.log("User name = "+username);
res.redirect(__dirname + "/public/arena.html");
});
var server = app.listen(3000);
我在浏览器中获得了用户名和响应,但服务器没有将我重定向到arena.html。我也没有任何错误。
为什么这些"容易" Node中的事情如此困难?
非常感谢你们的帮助。
答案 0 :(得分:3)
在这种情况下的问题是看起来你的POST路由中插入了一些测试(调试?)代码,这些代码正在停止重定向调用的运行。
以下是程序的修改(更正)版本,将以您希望的方式重定向用户:
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(__dirname + "/public/arena.html"));
app.get('/', function(req, res) {
res.sendFile(__dirname + "/public/index.html");
});
app.get('/arena', function(req, res) {
res.sendFile(__dirname + "/public/arena.html");
});
app.post('/login', function(req, res) {
var username = req.body.username;
console.log("User name = " + username);
// Note how I'm redirecting the user to the /arena URL.
// When you issue a redirect, you MUST redirect the user
// to a webpage on your site. You can't redirect them to
// a file you have on your disk.
res.redirect("/arena");
});
app.listen(3000);
我必须做几件事才能让这个工作:
摆脱对res.end
的号召。每当你拨打res.end
时,它都会终止请求,因此在该路由中的该呼叫之后发生的任何代码都将无法运行。
我必须为/arena
创建新路线。这只会呈现您创建的arena.html
文件。如果您想要将用户“重定向”到竞技场页面,则需要这样做。
我必须更新您的重定向代码才能将用户重定向到/arena
(我在步骤2中创建的新路线),以便用户点击/arena
路线,最后找回你想要展示的模板。
答案 1 :(得分:0)
您的res.redirect函数永远不会被执行,因为您正在该语句之前从函数返回。
答案 2 :(得分:0)
您将网址传递给res.redirect()
。该URL应该是一个具有适当路由的URL,该URL将提供所需的文件。
相反,你正在做:
res.redirect(__dirname + "/public/arena.html");
但是,这根本不是一个URL。这是本地硬盘上的路径名。 res.redirect()
将URL返回给浏览器,如果浏览器正在关注重定向,则会从头开始请求该URL作为分支新请求。因此,您需要发送一个URL(而不是路径),并且您需要发送一个URL,该URL具有为其配置的路由,以便提供所需的文件。
您的express.static()
语句似乎也可能不正确。对于我们更具体地帮助我们,我们需要知道相对于__dirname
的硬盘驱动器上的静态HTML文件的位置,我们需要确切地知道您希望URL如何工作。例如,您是否希望请求/arena.html
投放__dirname + /public/arena.html
?那是你想要做的吗?请解释该部分,以便我们更具体地就您的express.static()
声明提出建议。
如果是这种情况,那么您可以将重定向更改为:
res.redirect("/arena.html");