[英]create a page/route on the fly with node.js
是否可以使用 node.js 動態創建頁面(路由)?
假設我在 create-route.html 文件 ( localhost:4001/create-route ) 的表單中有一個簡單的文本輸入,我要輸入“我的頁面”,然后這將帶我到一個新的 url 視圖localhost:4001/my-page 顯示成功消息。
我不太確定這是否可行,因為我也不確定哪些節點模塊將允許客戶端訪問 createServer 對象並對其進行操作。 環顧四周“Express”在路由方面被引用了很多,但在查看框架之前,我很想看看這是否可能僅在 Node 中實現。
感謝您的幫助,謝謝。
網絡服務器.js
var http = require('http')
, url = require('url')
, fs = require('fs')
, server;
// declare http object
server = http.createServer(function(req,res){
// parse the pathname as a url, get the trimmed route from the request
var path = url.parse(req.url).pathname;
// handle the various routes
switch(path){
case '/':
fs.readFile(__dirname + '/index.html', function (err, data) {
if (err) throw err;
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data, 'utf8');
res.end();
});
case '/create-route':
fs.readFile(__dirname + '/create-route.html', function (err, data) {
if (err) throw err;
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data, 'utf8');
res.end();
});
// example of dynamically created 'route'
// "value' indicates the name that was inputted into the for on create-route.html, which in this case should be "my-page"
case '/value':
if (err) {throw err;}
var body = "<html>" +
"<head>" +
"<meta http-equiv='Content-Type' content='text/html'" +
"charset=UTF-8 />" +
"</head>" +
"<body>" +
"<p>youve just created a page called " + value + "</p>" +
"</body>" +
"</html>";
res.writeHead(200, {"Content-Type": "text/html"});
res.write(body);
res.end();
});
break;
default: send404(res);
}
});
創建-route.html
<html>
<head>
<title>Create a route</title>
</head>
<body>
<form action="/go-to-the-created-route">
<label>Enter a route name:</label>
<input type="text" name="create-route" id="create-route">
<button type="submit">Submit</button>
</form>
</body>
</html>
根據反饋更新路線
這是根據@penartur 反饋更新的“go-to-created-route”路線。
// Define the go-to-created-route
routes["go-to-created-route"] = function (req, res) {
// get the request url and split it to get the inputted value
var reqPath = req.url;
var splitPath = reqPath.split("=");
var routeName = splitPath[(splitPath.length - 1)]; // outputs the value entered into text input
//console.log(routeName);
// create the new route by passing in the value of routeName, and display a page
routes[routeName] = function (req, res) {
// Not getting in here :(
console.log("hello?");
var body = "<html>" +
"<head>" +
"<meta http-equiv='Content-Type' content='text/html'" +
"charset=UTF-8 />" +
"</head>" +
"<body>" +
"<p>youve just created a page called " + routeName + "</p>" +
"</body>" +
"</html>";
res.writeHead(200, {"Content-Type": "text/html"});
res.write(body);
res.end();
};
};
這是一個簡單的編程問題,與具體的Node.js沒有太大關系。 解決方案草案:
var http = require('http')
, url = require('url')
, fs = require('fs')
, server;
var routes = {};
routes["create-route"] = function (req, res) {
fs.readFile(__dirname + '/create-route.html', function (err, data) {
if (err) throw err;
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data, 'utf8');
res.end();
});
};
routes["go-to-the-created-route"] = function (req, res) {
var routeName = req.body["create-route"];
routes[routeName] = function (req, res) {
var body = "<html>" +
"<head>" +
"<meta http-equiv='Content-Type' content='text/html'" +
"charset=UTF-8 />" +
"</head>" +
"<body>" +
"<p>youve just created a page called " + routeName + "</p>" +
"</body>" +
"</html>";
res.writeHead(200, {"Content-Type": "text/html"});
res.write(body);
res.end();
};
};
// declare http object
server = http.createServer(function(req,res){
// parse the pathname as a url, get the trimmed route from the request
var path = url.parse(req.url).pathname;
var firstPart = path.split('/')[1];
if (routes.hasOwnProperty(firstPart)) {
routes[firstPart](req, res);
} else {
send404(res);
}
});
var http = require('http');
http.createServer(function(req,res){
var path = req.url.replace(/\/?(?:\?.*)?$/, '').toLowerCase();
switch(path) {
case '':
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Homepage');
break;
case '/getapi':
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<div>Hello world!</div>');
break;
default:
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end('Not Found');
break;
}
}).listen(4000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.