注销路由不起作用,即使使用另一个路由,也无法呈现或重定向到该路由。但是console.log("am clicked");
可以用
const express = require('express')
const app = express()
const path = require('path')
const fs = require('fs')
const port = 7000
const sqlite3 = require("sqlite3").verbose();
const session = require('express-session');
const cookieParser = require('cookie-parser');
const bodyparser = require('body-parser');
let fdata = require('./fashion.json');
fdata = fdata.Sheet1;
app.use(session({
secret: 'keyboardwarrior',
resave: false,
saveUninitialized: true,
cookie: {
maxAge: 30 * 60 * 1000 // 30 minutes
}
}));
app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.use(express.static(path.join(__dirname, "public")));
app.use(express.urlencoded({ extended: false }));
app.use(bodyparser.json());
app.use(cookieParser());
app.get('/', (req, res) => {
res.render('shop');
})
app.get('/shop', (req, res) => {
res.render('shop');
})
app.get('/checkout', (req, res) => {
res.render('checkout')
})
app.get('/fashion', (req, res) => {
res.send(fdata)
})
// Loggedin
app.get('/loggedin', (req, res) => {
res.render("shop")
})
// Blank
app.get('/blank', (req, res) => {
res.render("blank")
})
// Register
app.post('/register', async (req, res) => {
const {firstname, lastname, usermail, password} = req.body;
if (!usermail || !password) return res.status(400).send({error: "Email or password missing."});
db.serialize(() => {
db.each('SELECT COUNT(*) as count FROM user WHERE email = ?', [usermail], (err, row) => {
console.log(row)
if(err) {
console.log(err.message);
} else if(row.count > 0) {
console.log('there is a match');
} else {
db.run('INSERT INTO user (fname, lname, email, pass) VALUES(?,?,?,?)', [firstname, lastname, usermail, password], (err) => {
if (err) {
return console.log(err.message);
}
console.log("User successfully registered.");
})
res.redirect('/')
}
});
});
})
// const isLoggedIn = (req, res, next) => {
// if(req.session.currentUser){
// next();
// }else{
// res.redirect("/");
// }
// };
// app.get("/", isLoggedIn, (req, res) => {
// res.render("/", {currentUser: req.session.currentUser});
// });
app.get('/user/:id', function(req,res){
const id = req.params.id;
db.serialize(()=>{
db.each('SELECT * FROM user WHERE _id = ?', [id], (err, row) => {
try {
console.log(`${row._id}`);
res.send(row);
}catch (err) {
res.status(400).send(err);
}
})
})
});
// login
app.post('/', async (req, res) => {
const {usermail, password} = req.body;
db.serialize(()=>{
db.each('SELECT _id ID, email USEREMAIL, pass USERPASS FROM user WHERE email = ?', [usermail], (err, row) => {
if(err){
return console.error(err.message);
}else {
try {
if(row.USEREMAIL && row.USEREMAIL === usermail) {
console.log(`${row.ID}`);
req.session.isLoggedIn = true;
req.session.currentUser = `${row.USEREMAIL}`;
res.render('shop', {uid: `${row.ID}`});
}
} catch (err) {
res.status(400).send(err);
}
}
})
})
})
app.post('/logout', (req, res) => {
console.log("am clicked");
if (req.session) {
req.session.destroy();
console.log('have been clicked');
}
return res.render('shop', {uid: ``});
});
const db = new sqlite3.Database('users.db', err => {
if (err) {
return console.error(err.message);
}
console.log("Successful connection to the database 'users.db'");
});
app.all('*', (req, res) => {
res.render('404');
})
app.listen(port, () => {
console.log(`Listening on port ${port}`)
})
我希望它能重新渲染回家的路线
2条答案
按热度按时间7d7tgy0s1#
通过客户端Javascript代码发出的 AJAX 请求不会自动更改浏览器中的任何内容。它们不会将内容呈现到浏览器中。他们不遵循重定向,并告诉浏览器转到一个新的URL。他们只是返回一个http状态和内容回到你的Javascript。这取决于你的Javascript对发送回来的响应做些什么。
对于您的客户端代码:
这段代码只是向服务器发送一个POST请求,然后对从服务器返回的响应不做任何处理。因此,浏览器完全忽略该响应。不管你在服务器中呈现什么内容并作为响应发送回去,如果你发送回一个重定向响应也没关系,因为你的Javascript代码没有对任何返回的响应做任何事情。
注意,这与
<form>
POST请求不同。这些响应不涉及您的Javascript,并且浏览器会自动处理响应(重定向或新呈现的内容)。如果你想让浏览器显示一个新URL的内容,那么你可以让服务器执行一个
res.redirect(newURL)
,你可以让上面的Javascript检查返回的状态,如果它是一个3xx响应,那么它可以将window.location
设置为Location
头中的任何URL。这样,你的Javascript就会告诉浏览器去一个新的URL,然后它就会这样做。你可以这样做所有的客户端:
zphenhs42#
要解决此问题,您可以按如下方式修改注销路由: