Javascript 提交表单时出错:无法使用NodeJS+;快车
我是新学习的NodeJS+Express,现在我正在尝试构建一个简单的注册表单,但我在这个表单和其他表单中不断遇到相同的错误: 无法发布/注册权限 我在stackoverflow和其他网站上查阅了几十个类似的问题,但我没有找到一个适用于我的案例的答案 表格如下: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
<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} `))