Javascript 提交表单时出错:无法使用NodeJS+;快车

Javascript 提交表单时出错:无法使用NodeJS+;快车,javascript,html,node.js,forms,express,Javascript,Html,Node.js,Forms,Express,我是新学习的NodeJS+Express,现在我正在尝试构建一个简单的注册表单,但我在这个表单和其他表单中不断遇到相同的错误: 无法发布/注册权限 我在stackoverflow和其他网站上查阅了几十个类似的问题,但我没有找到一个适用于我的案例的答案 表格如下: <form id="register-form" class="panel-form" action="/registerauth" method="POST"> <input type="text

我是新学习的NodeJS+Express,现在我正在尝试构建一个简单的注册表单,但我在这个表单和其他表单中不断遇到相同的错误:

无法发布/注册权限

我在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>
具有控制器代码但尚未调用的模块:

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


注意:我在项目中使用不同的操作方法创建了其他表单,所有表单都给出了相同的错误

const express=require(“express”)
const app=express()
常量路由器=需要(“/路由器”)
应用程序使用(快速静态(“公共”))
app.use(express.urlencoded({extended:false}))
app.use(express.json())
app.use(“/”,router)//将所有路由写入此文件“router”

module.exports=app
您需要在服务器端口“3000”上呈现HTML文件。我认为您试图在服务器外部呈现html页面时直接访问“”

对App.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页面。此外,为了使登录组件正常工作,您需要重定向到POST请求中的“/login/”路径

Hi@Runsis,当您单击表单提交按钮时,您是否在控制台中看到字符串
testing
,即您登录节点服务器的路由
registerauth
?如何启动节点服务器?@mgarcia您好,我在终端或浏览器控制台中都没有看到任何控制台消息。我用nodemon app.js启动我的节点服务器,它可以运行,例如加载模板,但它不能运行我所要求的:/您在代码中定义了两个路由,一个在
app.js
中,另一个在控制器文件中。
app.js
中的路由是
“/registerauth”
,但控制器文件中的路由是
“/login/registerauth”
,因为这一行:
app.use('/login',login)关于代码的一些重要注释:对于web应用程序,您应该使用连接池来提高性能和可伸缩性。对于SQL语句,必须使用绑定变量来实现安全性(和可伸缩性),而不是
${cliente.username}
。查看节点oracledb和。还要检查一下你的意思是什么?这不是和以前一样但更模块化吗?首先,你应该让你的项目结构更有条理。创建具有不同职责的单独文件。为路由创建一个文件,为数据库连接创建另一个文件。然后为模型、控制器和视图创建文件夹。我认为你的应用程序找不到合适的模块,对你自己来说,需要合适的模块似乎有点复杂。
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} `))