无法发布表格-ExpressJS

时间:2019-09-29 07:43:37

标签: javascript mysql express

我要学习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'))

当尝试发布此表单时,我得到: 无法发布/登录 我在这里想念什么?

2 个答案:

答案 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
});