没有注册 POST 请求"/>
app.post() 没有注册 POST 请求
我是 POST 方法的新手,我一直被困在这个问题上,似乎 app.post() 不起作用。我已经遵循了一些教程来尝试理解问题,但我不知道可能是什么问题。我可能误解了教程中的某些内容或犯了一个非常明显的错误。
我试图制作一个 HTML 表单,通过 POST 将其数据提供给服务器。看来问题是服务器没有读取数据,因为我可以在开发人员工具上看到发送了 POST,而且我还设法通过 PHP 服务器获取了数据。
我的 HTML 脚本
<!DOCTYPE html>
<html>
<head>
<title>schoolpartygames.tv</title>
<link rel="stylesheet" href="/code-screen.css" type="text/css"/>
</head>
<body style="background-color: #00A6FF;">
<p class="title">Schoolpartygames.tv</p>
<form action="/Joining" method="post" onsubmit="return checkRoomCode();">
<input class="text" type="text" maxlength="24" name="UserName" id="UserName" placeholder="Enter Username Here">
<input class="text" type="text" maxlength="6" name="roomCode" id="roomCode" placeholder="Enter Room Code Here">
<button class="joinbutton" type="submit">JOIN</button>
</form>
</body>
</html>
我的js脚本:
let express = require('express');
let bodyParser = require('body-parser');
const morgan = require('morgan');
const WebSocket = require('ws');
const http2 = require('http2');
const fs = require('fs');
const wsport = 8080;
const webport = 443;
const path = require('path');
const app = express();
var lobbies = [];
var helmet = require('helmet');
var rateLimit = require("express-rate-limit");
var sqlite3 = require('sqlite3').verbose();
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per windowMs
});
var db = new sqlite3.Database('./database/users.db');
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(express.static('public'));
app.use(helmet());
app.use(limiter);
db.run('CREATE TABLE IF NOT EXISTS emp(UserName TEXT, roomCode TEXT)');
app.post('/Joining', (req, res) => {
var UserName = (req.body.UserName);
var RoomCode = (req.body.RoomCode);
db.serialize(()=>{
db.run('INSERT INTO emp(UserName,RoomCode) VALUES(?,?)', [req.body.UserName, req.body.RoomCode], function(err) {
if (err) {
return console.log(err.message);
}
console.log("New user has been added");
res.send("New user has been added into the database with code = "+req.body.GameCode+ " and Name = "+req.body.UserName);
});
console.log(` ${UserName}`)
console.log(` ${RoomCode}`)
});
});
const server = http2.createSecureServer({
"key": fs.readFileSync("private.pem"),
"cert": fs.readFileSync("cert.pem"),
});
server.on("stream", (stream, headers) => {
const url = headers[":path"];
let filePath = "";
if (url === "/") {
filePath = "public/index.html";
} else if (url === "/code-screen.css") {
filePath = "public/code-screen.css";
} else if (url === "/Joining") {
filePath = "public/joining.html";
} else if (url === "/code-screen.css") {
filePath = "public/code-screen.css";
} else {
filePath = "public/404NotFound.html"
}
if (filePath !== "") {
const contentType = getContentType(filePath);
fs.readFile(filePath, (err, data) => {
if (err) {
stream.respond({ "content-type": "text/plain", "status": 500 });
stream.end("Internal Server Error");
} else {
stream.respond({
"content-type": contentType,
"status": 200,
});
stream.end(data);
}
});
} else {
stream.respond({ "content-type": "text/plain", "status": 404 });
stream.end("File Not Found");
}
});
function getContentType(filePath) {
const fileExt = path.extname(filePath);
switch (fileExt) {
case ".html":
return "text/html";
case ".css":
return "text/css";
default:
return "text/plain";
}
}
server.listen(webport, () => {
console.log(`HTTP/2 server started on port ${webport}`);
});
const wss = new WebSocket.Server({ port: wsport }, () => {
console.log(`WebSocket server started on port ${wsport}`);
});
wss.on('connection', function connection(ws) {
console.log("WebSocket connection established");
ws.on('message', (data) => {
data = data.toString(); // convert data to string
console.log(`Received message: '${data}' with length ${data.length}`);
if (data.replace(/\s+/g, '') === "CL") {
console.log(`data is sending: = ${data}`);
const generateCode = (length) => {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
let code = '';
for (let i = 0; i < length; i++) {
const randomIndex = Math.floor(Math.random() * characters.length);
code += characters[randomIndex];
}
return code;
}
const code = generateCode(6);
ws.send(`Your code is: ${code}`);
console.log(`Your code is: ${code}`);
lobbies.push(code);
console.log(lobbies);
console.log("sent");
} else {
console.log(`data = ${data}`);
ws.send('Message received');
console.log('not sent');
}
});
});
wss.on('listening', () => {
console.log(`WebSocket server listening on port ${wsport}`)
});
wss.on('error', (error) => {
console.error(`WebSocket server error: ${error.message}`)
});
process.on('uncaughtException', (error) => {
console.error(`Uncaught exception: ${error.message}`);
process.exit(1);
});
代码的相关部分:
var UserName = (req.body.UserName);
var RoomCode = (req.body.RoomCode);
app.post('/Joining', (req, res) => {
db.serialize(()=>{
db.run('INSERT INTO emp(UserName,GameCode) VALUES(?,?)', [req.body.UserName, req.body.GameCode], function(err) {
if (err) {
return console.log(err.message);
}
console.log("New user has been added");
res.send("New user has been added into the database with code = "+req.body.GameCode+ " and Name = "+req.body.UserName);
});
console.log(` ${UserName}`)
console.log(` ${RoomCode}`)
});
});
回答如下:
您正尝试在您的加入操作中从请求中加载
req.body.GameCode
,但不存在这样的元素。你的form
有一个roomCode
:
<form action="/Joining" method="post" onsubmit="return checkRoomCode();">
<input class="text" type="text" maxlength="24" name="UserName" id="UserName" placeholder="Enter Username Here">
<input class="text" type="text" maxlength="6" name="roomCode" id="roomCode" placeholder="Enter Room Code Here">
<button class="joinbutton" type="submit">JOIN</button>
</form>
因此,您需要弄清楚
roomCode
是否对您有用,如果有用,请相应地更改您的服务器端。您还需要弄清楚GameCode
是否对您有用,在这种情况下您需要调整您的form
。我的猜测是您的roomCode
中的form
与GameCode
相同并且这些名称不匹配,但是您需要根据我提供的方法来解决这个问题。
更多推荐
app.post() 没有注册 POST 请求
发布评论