Ошибка при отправке формы: невозможно POST с использованием NodeJS + ExpressJS - PullRequest
0 голосов
/ 19 января 2020

Я только что изучил NodeJS + Express, и теперь я пытаюсь создать простую форму регистра, но я продолжаю получать ту же ошибку с этой и другими формами:

Cannot POST / registerauth

Я просмотрел десятки похожих вопросов в stackoverflow и на других сайтах, но я не нашел ответа, подходящего для моего случая.

Вот форма:

<form id="register-form" class="panel-form" action="/registerauth" method="POST">
          <input type="text" name="register-username" id="register-username" class="fill-input" placeholder="Username *" autofocus="true" maxlength="15" required>

          <input type="password" name="register-password" id="register-password" class="fill-input" placeholder="Password *" maxlength="30" required>


                        <button type="submit">Register</button>
                    </form>

Мое приложение. js файл:

const express = require('express');
const app= express();
const path = require('path');
const port = process.env.PORT || 3000;
const login = require('./routes/login'); /*MODULE THAT HAS THE CONTROLLER CODE*/

app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname , 'public')));

app.post('/registerauth',function (req,res,next){  /*TRIED THIS BUT DIDN'T WORK*/
    console.log("testing");
    res.json(req.body);
})

app.use('/login', login); /*TRIED CALLING THE MODULE THAT HAS THE CONTROLLER AND DELETING THE LINE ABOVE BUT DIDN'T WORK*/

app.listen(port, ()=> console.log(`server started on port ${port} `))

Модуль, в котором есть код контроллера, но он даже не называется:

const express    = require('express');
const oracledb    = require('oracledb');
const router        = express.Router();
const dbConfig =require('../dbconfig.js') ;

class Cliente{
    constructor(username,password,nombre,email){
        this.username = username;
        this.password=password;
        this.nombre=nombre;
        this.email=email;
    }
}

    let conexion;

    router.post('/registerauth',async(req,res,next)=>{ /*all this is not working neither*/

        try{
            console.log("THIS IS NOT WORKING");

            cliente = new Cliente(req.body.username, req.body.password,req.body.nombre,req.body.email);

     conexion= await oracledb.getConnection(dbConfig);
     const result = await conexion.execute(
        `INSERT INTO Cliente values (${cliente.username}, ${cliente.password},
 ${cliente.nombre}, ${cliente.email})`
     );
} catch(err){
    console.error(err);
}finally{
    conexion.close();
}
    })

module.exports = router;

И у меня есть проект папка структурирована следующим образом:

/
 node_modules
 public/
       css/
       media/
       scripts/
       index.html (just the file inside public folder)
       register.html (just the file inside public folder THIS IS THE REGISTER FORM FILE)
 routes/
       api/
          login.js
 app.js
 dbconfig.js
 package-lock.json
 package.json

Примечание: я создал другие формы в своем проекте с различными методами действия, и все они выдавали одну и ту же ошибку

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Вам необходимо отобразить файл HTML на вашем сервере через порт '3000'. Я думаю, что вы пытаетесь получить доступ к 'http://localhost: 3000 / registerauth ' напрямую при отображении страницы html вне сервера.

Внесите эти изменения в файл приложения. js

const express = require('express');
const app= express();
const path = require('path');
const port = process.env.PORT || 3000;
const login = require('./routes/login'); /*MODULE THAT HAS THE CONTROLLER CODE*/

app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));

//newly added code
app.get('/',(req,res)=>{
    res.sendFile('index.html');

})

app.post('/registerauth',function (req,res,next){  /*TRIED THIS BUT DIDN'T WORK*/
    console.log("testing");
    res.json(req.body);
    // Redirect to '/login' here instead of sending response which will trigger the login module
})

app.use('/login', login); /*TRIED CALLING THE MODULE THAT HAS THE CONTROLLER AND DELETING THE LINE ABOVE BUT DIDN'T WORK*/

app.listen(port, ()=> console.log(`server started on port ${port} `))

Визуализация страницы html, когда вы нажмете 'http://localhost: 3000 '. Кроме того, для того, чтобы ваш компонент входа работал, вам нужно перенаправить на путь '/ login /' в запросе POST

0 голосов
/ 19 января 2020

это вся идея:

const express = require("express")
const app = express()

const router = require("./router")

app.use(express.static("public"))
app.use(express.urlencoded({extended: false}))
app.use(express.json())

app.use('/', router) // write all your routes in this file 'router'

module.exports = app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...