我有一个工作正常的小型Express应用程序,我用它来创建注册操作,但我觉得它变得越来越混乱,所以我分离了POST请求路由处理程序,并将其放入另一个文件中,我感觉我正确地导入了所有内容,但我一直收到错误:
Cannot POST /register
以下是我的server.js文件:
//Creating the express app and hosting it locally
const express=require('express');
const app=express();
const bcrypt=require('bcrypt');
const mysql=require('mysql2');
const flash=require('express-flash');
const session=require('express-session');
const util = require('util'); // Import the util module
const regroute=require('./Register');
// Load environment variables from .env file
require('dotenv').config();
const port= process.env.PORT ;
const host= process.env.DB_HOST;
const user= process.env.DB_USER;
const db_name=process.env.DB_NAME;
const pass=process.env.DB_PASSWORD;
const sec=process.env.SECRET_SESSION;
app.listen(port);
////Creating a database connection object
const connection = mysql.createConnection({
host: host,
user: user,
password: pass,
database: db_name
});
connection.connect();
// Setting up the view engine (ejs)
app.set('view engine', 'ejs');
//setting up middlewares
app.use(session({
secret: sec, // Replace with a strong secret key
resave: false,
saveUninitialized: false
}));
app.use(express.urlencoded({extended: false}));
app.use(flash());
app.use('/register',regroute);
////Routing
app.get('/',(req,res)=>{
res.render('index.ejs');
});
app.get('/login',(req,res)=>{
res.render('login.ejs');
});
app.get('/register',(req,res)=>{
res.render('register.ejs');
});
下面是我的Register.js:
const express=require('express');
const router=express.Router();
router.post('/register',async (req,res)=>{
const {name,email,password,cpassword}=req.body;
if(password!=cpassword){
req.flash('error', 'Passwords do not match');
return res.redirect('/register');
}
////Setting a query to check if an email already exist
try{
const queryAsync = util.promisify(connection.query).bind(connection);
const results = await queryAsync('SELECT * FROM users WHERE email=?', [email]);
if(results.length> 0 ){
console.log('email found');
req.flash('error', 'Email already exists');
return res.redirect('/register');
}
const hashedpassword=await bcrypt.hash(password,10);
connection.query('insert into users (user_name,email,password) values (?,?,?)',[name,email,hashedpassword])
}catch(e){
console.log('here is the error',e);
req.flash('error','error occured please try again');
return res.redirect('/register');
}
res.redirect('/login');
});
module.exports=router;