我有多個關于Nodejs的新手問題。
我為 auth/login 建立了 api,我對連接前端和后端有疑問。 因此,首先,我想知道在我的表單中的動作,我應該把我的api的網址?或其他路線?
<div class="container"/span>>
<div class="boxlogin">
<img id="img-logo" src="img/logo.png" alt="Logo" >
<h1>登錄</h1>
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<form action="????" method="POST" >
<input type="email" name="email" id="email" placeholder="Email" class="input-box" required>
<input type="password" name="password" id="password" placeholder="密碼" class="input-box" required>
<button type="submit" class="btn-signup" >Log in</button>
<p class="compte-deja-cree">還沒有賬戶? <a href="/signup-user.ejs">登錄</a></p>。
</form>
</div>
<div class="imglogin"><img id="img-login" src="img/undraw_Active_support_re_b7sj.svg" alt="Logologin"> </div>
</div>
在我的控制器中也有一個try catch,我想顯示錯誤(密碼錯誤,或電子郵件錯誤),但我不知道該如何做。
我使用的是nodejs/mongodb/express/ejs.
。這里有一些我的代碼供大家理解。
server.js
app.use("/css"/span>, express. static(__dirname "public/css")) 。
app.use("/img", express.static(__dirname "public/img") )。)
app.set("view-engine", "ejs") 。
app.get("*"/span>, checkUser)。
app.get("/jwtid", requireAuth, (req, res) => /span> {
res.status(200).send(res。 locals.user._id)。)
});
const userRoutes = require("./routes/user.routes") 。
const mainRoutes = require("./routes/main.routes") 。
app.use("/api/user", userRoutes)。
app.use('/', mainRoutes) 。
authController :
const SellerModel = require(" 。 ./models/sellerModel")。)
const SuperUserModel = require("../models/superUserModel")。
const UserModel = require("./models/userModel") 。
const LoginModel = require("./models/loginModel")。
const jwt = require("jsonwebtoken") 。
const { signUpErrors, signInErrors } = require("./utils/errorsUtils")。
const maxAge = 3 * 24 * 60 * 1000;
const createToken = (id)=> {
return jwt.sign({ id }, process.env.TOKEN_SECRET, {
expiresIn: maxAge,
});
};
module.exports.sellerSignUp = async (req, res) => {
const {company,email,password,telephone,address,zipcode,city} = req.body;
try {
const user = await SellerModel.create({company, email, password, telephone, address, zipcode, city}) 。
res.redirect("/"/span>)。
} catch (err) {
const errors = signUpErrors(err)。
res.status(200).send({ errors }) 。
}
};
module.exports.userSignUp = async (req, res) => {
const {email,password,telephone,address,zipcode,city} = req.body;
try {
const user = await UserModel.create({email, password, telephone, address, zipcode, city})。
res.redirect("/"/span>)。
} catch (err) {
const errors = signUpErrors(err)。
res.status(200).send({ errors }) 。
}
};
module.exports.superUserSignUp = async(req, res)=> {
const { email, password } = req.body;
try {
const user = await SuperUserModel.create({ email, password })。
res.redirect("/"/span>)。
} catch (err) {
const errors = signUpErrors(err)。
res.status(200).send({ errors }) 。
}
};
module.exports.signIn = async (req, res) => {
const { email, password } = req.body;
try {
const user = await LoginModel.login(email, password)。
const token = createToken(user._id)。
res.cookie("jwt"/span>, token, { httpOnly: true, maxAge })。)
if (user.role == "seller") {
res.redirect("/success") 。
} else if (user.role == "user") {
res.redirect("/success-user") 。
} else if (user.role == "superuser" ) {
res.redirect("/success-admin") 。
};
} catch (err) {
const errors = signInErrors(err)。
res.status(200).json({ errors }) 。
}
};
module.exports.logout = (req, res) => /span> {
res.cookie("jwt", "", { maxAge: 1 })。)
res.redirect("/"/span>)。
};
用戶.路由:
const router = require(" express"). Router()。
const authController = require("./controllers/authController") 。
router.post("/register/seller", authController.sellerSignUp) 。
router.post("/register/user", authController.userSignUp) 。
router.post("/register/admin", authController.superUserSignUp) 。
router.post("/login", authController.signIn) 。
router.get("/logout", authController.logout) 。
module.exports = router;
main.rouse:
const router = require("express") 。 Router()。
router.get("/", (req, res) => /span> {
res.render("login.ejs")。
});
router.get("/signup-user", (req, res) => /span> {
res.render("signup-user.ejs") 。
});
router.get("/signup-seller", (req, res) => /span> {
res.render("signup-seller.ejs") 。
});
router.get("/success", (req, res) => /span> {
res.render("successful.ejs"/span>)。
});
router.get("/success-user", (req, res) => /span> {
res.render("successful-user.ejs") 。
});
router.get("/success-admin", (req, res) => /span> {
res.render("successful-admin.ejs"/span>)。
});
module.exports = router;
祝你有一個很棒的星期天!
uj5u.com熱心網友回復:
為了解決這個問題,我添加了一些依賴項。 connect-flash express-session express-messages
在我的Server.js中
app.use(session({
secret:"Secret"。
cookie:{ maxAge : 60000},
resave: false,
saveUninitialized: true。
}))
app.use(flash()) 。
app.use(require('connect-flash') ()。
app.use(function(req,res,next){
res.locals.messages = require('express-messages')(req,res)。
next()。
})
app.use(express.static("public") )。)
在authController中
module。 exports.sellerSignUp = async (req, res) => {
const {company,email,password,telephone,address,zipcode,city} = req.body;
try {
const user = await SellerModel.create({company, email, password, telephone, address, zipcode, city}) 。
req.flash('info', `Successful Register`)
res.redirect("/") 。
} catch (err) {
const errors = signUpErrors(err)。
console.log(errors)。
req.flash('message', errors.email || errors.password ) 。
res.redirect('/register-seller') 。
}
};
在我的主路由中 :
const router = require("express") 。 Router()。
const services = require('./service/render');
router.get("/", services.login) 。
router.get("/register-user", services.registerUser)。
router.get("/register-seller",services.registerSeller) 。
router.get("/success",services.sucessful) 。
router.get("/success-user",services.sucessfull_t) 。
router.get("/success-admin",services.sucessful_a) 。
module.exports = router;
render.js:
exports. login = (req, res) => {res.render("login. ejs",{ errorMessage: req.flash(' message'), successMsg: req. flash('info') })};
exports.registerUser = (req, res) => /span> {res. render("register-user.ejs",{ message: req. flash('message')})。
exports.registerSeller = (req, res) => /span> {res. render("register-seller.ejs",{ message: req. flash('message')})。
exports.sucessful = (req, res) => /span> {
res.render("successful.ejs"/span>)。
};
exports.sucessfull_t = (req, res) => /span> {
res.render("successful-t.ejs") 。
};
exports.sucessful_a = (req, res) => /span>{
res.render("successful-a.ejs") 。
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327647.html
標籤:
上一篇:如何將組件指標從QML傳到C ?
