const http = require('http');
const jwt = require('jsonwebtoken');
const { verifyToken } = require('./utils');
class Server {
constructor() {
this.server = http.createServer(this.handleRequest.bind(this));
}
start() {
this.server.listen(3000, () => {
console.log('Server listening on port 3000');
});
}
handleRequest(req, res) {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
console.log(`Received data: ${body}`);
const token = jwt.sign({ data: body }, 'secret', { expiresIn: 30 });
res.setHeader('Set-Cookie', `token=${token}; Max-Age=30`);
verifyToken(token, (err, decoded) => {
if (err) {
res.writeHead(401, {'Content-Type': 'text/plain'});
res.end('Unauthorized');
} else {
req.decoded = decoded;
if (req.method === 'GET') {
this.handleGetRequest(req, res);
} else if (req.method === 'POST') {
this.handlePostRequest(req, res);
} else {
res.writeHead(405, {'Content-Type': 'text/plain'});
res.end('Method not allowed');
}
}
});
});
}
handleGetRequest(req, res) {
const endpoint = req.url;
switch (endpoint) {
case '/data':
this.handleDataRequest(req, res);
break;
case '/hello':
this.handleHelloRequest(req, res);
break;
case '/goodbye':
this.handleGoodbyeRequest(req, res);
break;
default:
res.writeHead(404, {'Content-Type': 'text/plain'});
res.end('Not found');
}
}
handlePostRequest(req, res) {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
console.log(`Received data: ${body}`);
if (req.url === '/data') {
// Perform some action based on the data received for the /data endpoint
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('POST request received for /data endpoint');
} else {
res.writeHead(404, {'Content-Type': 'text/plain'});
res.end('Not found');
}
});
}
}
const server = new Server();
server.start();
node~server
最新推荐文章于 2024-11-05 15:26:40 发布