我要学习ExpressJS,我想做登录部分,但是我给了我 无法发布/登录 我正在使用post方法为什么它给我这个错误 这是一篇详细的帖子,在此先感谢您对我的帮助
html部分
<form method="POST">
<div class="container">
<label for="uname"><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="name" >
<label for="psw"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="password">
<button type="submit">Login</button>
</div>
</form>
route.js
router.post('/login'),(req,res)=>{
var username= req.body.name;
var password = req.body.password;
con.query('SELECT * FROM authentication WHERE username = ?',username, function (error, results, fields) {
if (error) {
// console.log("error ocurred",error);
res.send({
"code":400,
"failed":"error ocurred"
})
}else{
// console.log('The solution is: ', results);
if(results.length >0){
if(results[0].password == password){
res.send({
"code":200,
"success":"login sucessfull"
});
}
else{
res.send({
"code":204,
"success":"username and password does not match"
});
}
}
else{
res.send({
"code":204,
"success":"username does not exits"
});
}
}
});
}
module.exports = router
index.js
const express = require('express');
const app = express()
const bodyParser = require("body-parser");
const indexRouter = require('./routes/route')
const con = require('./models/db')
con.connect(function(err) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(bodyParser.json());
var exphbs = require('express-handlebars');
console.log(__dirname)
app.use('/',express.static(__dirname + '/public'));
app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');
app.use('/',indexRouter)
const PORT = 5000;
app.listen(PORT,()=>console.log('it started on 5000'))
当尝试发布此表单时,我得到: 无法发布/登录 我在这里想念什么?
答案 0 :(得分:0)
您应该处理当前页面,而不是route.js中的“ /登录”页面:
router.post('/', //...
代替写作
router.post('/login', //...
因为您已将表单数据发送到当前页面,而不是“ /登录”页面
为什么选择当前页面? 因为,您没有在表单中定义动作属性
答案 1 :(得分:0)
您需要定义表单操作
<form action="/login" method="post">
但是我建议您使用js发送请求
fetch('/login', {
method: 'POST',
body: JSON.stringify(yourFormData),
// ...another Opts if it needs
})
您的服务器代码也可能有问题,因为在 indexRouter 文件中看不到定义路由器,您应该添加它:
const express = require('express');
const router = express.Router();
// then your code:
router.post('/login', loginController);
但是您可以为支票过帐请求添加以下行:
app.post('/login', (req, res) => {
res.status(201).json(req.body); // or console.log
});