javascript - 我无法重定向到 Node.js API 中的 HTML 页面
问题描述
我有几个 API 端点 /auth/register 和 /auth/login 并且 /auth 是基本 URL,并且在 /register 和 /login 上有端点。
我的文件夹结构是:
我正在从 app.js 重定向注册页面,它可以工作:
app.get('/', (req, res, next) => {
res.set({ 'Access-Control-Allow-Origin': '*' })
return res.redirect('signup.html')
// res.status(200).send('Yes, working')
})
但是当我点击注册页面上的提交按钮时,它不会重定向到登录页面。这是注册页面:
<!DOCTYPE html>
<html>
<head>
<title>Signup</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<br>
<br>
<br>
<div class="container" >
<div class="row">
<div class="col-md-3">
</div>
<div class="col-md-6 main">
<form action="/auth/register" method="post">
<h1> Signup form </h1>
<input class="box" type="text" name="firstName" id="firstName" placeholder="Enter your First Name" required /><br>
<input class="box" type="text" name="lastName" id="lastName" placeholder="Enter your Last Name" required /><br>
<input class="box" type="email" name="email" id="email" placeholder="Enter your E-Mail " required /><br>
<input class="box" type="password" name="password" id="password" placeholder="Enter your Password " required/><br>
<input class="box" type="text" name="role" id="role" placeholder="Enter your Role " required/><br>
<br>
<input type="submit" id="submitDetails" name="submitDetails" value="Submit Your Details" /><br>
</form>
</div>
<div class="col-md-3">
</div>
</div>
</div>
</body>
</html>
我的 /auth/register API
router.post('/register, (req, res, next) => {
res.redirect('signin.html')
//also tried ../public/signin.html
//also tried sendFile but it unable to load css file
})
因此,我似乎犯了与路径相关的错误,因为当我从 app.js 加载时它可以工作,但是当 /auth/register 运行驻留在 auth 文件夹中时,它无法重定向。
解决方案
return res.redirect('signup.html')
redirect(url)
您将用户重定向到一条路线,因此您必须传递一个 url。例如:
redirect("/myPage")
为了向客户端显示此端点,您应该已经定义了此端点。但看起来你想发送一个 html 文档而不是将用户重定向到不同的路由。所以你应该有:
res.sendFile("signup.html")
编写此代码后,express 将自动查找静态文件夹。所以你应该已经告诉 express 公开文件的位置。然后 express 将进入公用文件夹并在公用文件夹中查找 signup.html 并将其发送。
这是您告知 express 静态文件位置的方式。
app.use(express.static('public'))
这意味着根目录中“公共”文件夹内的文件是公开可用的。
由于express.static
是中间件功能,因此必须将其放在路由之前。因为在这种情况下
router.get("/myPage",(req,res)=>{
res.sendFile("signup.html")})
app.use(express.static('public'))
当客户端点击“,myPage”端点时,由于此端点不知道公用文件夹的位置,您的应用程序将抛出错误。
您放置的此代码具有不同的目的:
router.post('/register, (req, res, next) => {
res.redirect('signin.html')
//also tried ../public/signin.html
//also tried sendFile but it unable to load css file
})
router.post 表示向“/register”发送 POST 请求。发布请求是客户端发送一些数据或向端点提交表单时。但是访问一个网站是一个 GET 请求。因此,如果您想向用户显示某些内容,则需要使用router.get()
.
推荐阅读
- python-3.x - Python 2 到 Python 3 结构包问题
- material-ui - 您如何影响 MuiCardActrions 组件上的填充
- angular - 尝试在另一个模块中使用一个模块但失败
- reactjs - componentDidMount() 重新加载组件
- python - 寻找植物根部的轮廓
- security - 如何使应用程序自动更新安全
- google-cloud-firestore - Firestore 持久性延迟
- assembly - 从另一个文件调用汇编函数
- python - 在类中调用其他方法时缺少类属性
- javascript - 遍历 Handlebars 中的数组数组