一切都很好,但注销不起作用 - (不能 POST /logout)
Everything is fine but logout doesn't work - (Cannot POST /logout)
我的注销不起作用,我正在尝试找出原因。
当我点击提交时它说:无法 POST /logout
我已经使用 passport 来检查用户的数据,并且我已经为每个网页创建了路由。
我试了很多东西,但我认为问题可能出在操作端的表单上。
感谢您的帮助。
这里是代码:
animator.ejs
<h1>Hi <%= name %></h1>
<form action="logout?_method=DELETE" method="POST">
<button type="submit">Log Out</button>
</form>
animator.js
const express = require('express')
const router = express.Router()
const passport = require('passport')
require('../passport-config')(passport);
router.get('/', (req, res) =>{
res.render('animator/animator', {name: req.user.email})
})
router.delete('/logout', (req, res) =>{
req.logout()
res.redirect('/login')
})
module.exports = router
server.js
if(process.env.NODE_ENV !== 'production') {
const dotenv = require('dotenv')
dotenv.config();
}
const express = require('express')
const expressLayouts = require('express-ejs-layouts')
const passport = require('passport')
const flash = require('express-flash')
const session = require('express-session')
const dotenv = require('dotenv')
const app = express()
require('./passport-config')(passport);
const indexRouter = require('./routes/index')
const registerRouter = require('./routes/register')
const loginRouter = require('./routes/login')
const parentRouter = require('./routes/parent')
const animatorRouter = require('./routes/animator')
app.set('view engine','ejs')
app.set('views', __dirname + '/views')
app.set('layout', 'layouts/layout')
app.use(expressLayouts)
app.use(express.static('public'))
app.use(express.urlencoded({ extended : false }))
app.use(flash())
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
const mongoose = require('mongoose');
mongoose.connect(process.env.DATABASE_URL, {
useNewUrlParser: true, useUnifiedTopology: true}).then(()=>{
console.log('Successfully connected to the mongoDB Atlas!')
}).catch((error)=>{
console.log('impossible to connect to the mondoDB Atlas !')
console.error(error);
});
app.use('/', indexRouter)
app.use('/register', registerRouter)
app.use('/login', loginRouter)
app.use('/animator', animatorRouter)
app.use('/parent', parentRouter)
app.listen(process.env.PORT || 3000)
您似乎在发出 POST 请求,但路由已配置为删除。
您可以更新表单 HTML 以使用 DELETE 方法或为路由配置 POST。
表单更新选项:
<form action="/logout" method="DELETE">
服务器重新配置选项:
router.post('/logout', (req, res) =>{
req.logout()
res.redirect('/login')
})
<form action="/logout" method="POST">
我确实找到了问题的答案。
感谢您的帮助。
这是我所做的:
在名为 index.js
的文件上
router.post('/logout', (req, res) => {
req.logOut()
res.redirect('/login')
})
然后在文件上 parent.js 和 animator.js I
<h1>Hi <%= name %></h1>
<form action="/logout?_method=DELETE" method="POST">
<button type="submit">Log Out</button>
</form>
一切都很好。
我的注销不起作用,我正在尝试找出原因。
当我点击提交时它说:无法 POST /logout
我已经使用 passport 来检查用户的数据,并且我已经为每个网页创建了路由。
我试了很多东西,但我认为问题可能出在操作端的表单上。
感谢您的帮助。
这里是代码:
animator.ejs
<h1>Hi <%= name %></h1>
<form action="logout?_method=DELETE" method="POST">
<button type="submit">Log Out</button>
</form>
animator.js
const express = require('express')
const router = express.Router()
const passport = require('passport')
require('../passport-config')(passport);
router.get('/', (req, res) =>{
res.render('animator/animator', {name: req.user.email})
})
router.delete('/logout', (req, res) =>{
req.logout()
res.redirect('/login')
})
module.exports = router
server.js
if(process.env.NODE_ENV !== 'production') {
const dotenv = require('dotenv')
dotenv.config();
}
const express = require('express')
const expressLayouts = require('express-ejs-layouts')
const passport = require('passport')
const flash = require('express-flash')
const session = require('express-session')
const dotenv = require('dotenv')
const app = express()
require('./passport-config')(passport);
const indexRouter = require('./routes/index')
const registerRouter = require('./routes/register')
const loginRouter = require('./routes/login')
const parentRouter = require('./routes/parent')
const animatorRouter = require('./routes/animator')
app.set('view engine','ejs')
app.set('views', __dirname + '/views')
app.set('layout', 'layouts/layout')
app.use(expressLayouts)
app.use(express.static('public'))
app.use(express.urlencoded({ extended : false }))
app.use(flash())
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
const mongoose = require('mongoose');
mongoose.connect(process.env.DATABASE_URL, {
useNewUrlParser: true, useUnifiedTopology: true}).then(()=>{
console.log('Successfully connected to the mongoDB Atlas!')
}).catch((error)=>{
console.log('impossible to connect to the mondoDB Atlas !')
console.error(error);
});
app.use('/', indexRouter)
app.use('/register', registerRouter)
app.use('/login', loginRouter)
app.use('/animator', animatorRouter)
app.use('/parent', parentRouter)
app.listen(process.env.PORT || 3000)
您似乎在发出 POST 请求,但路由已配置为删除。 您可以更新表单 HTML 以使用 DELETE 方法或为路由配置 POST。
表单更新选项:
<form action="/logout" method="DELETE">
服务器重新配置选项:
router.post('/logout', (req, res) =>{
req.logout()
res.redirect('/login')
})
<form action="/logout" method="POST">
我确实找到了问题的答案。
感谢您的帮助。
这是我所做的:
在名为 index.js
的文件上 router.post('/logout', (req, res) => {
req.logOut()
res.redirect('/login')
})
然后在文件上 parent.js 和 animator.js I
<h1>Hi <%= name %></h1>
<form action="/logout?_method=DELETE" method="POST">
<button type="submit">Log Out</button>
</form>
一切都很好。