gpt4 book ai didi

javascript - 构建解析 URI 的 Node.js 服务器

转载 作者:行者123 更新时间:2023-12-03 05:36:10 24 4
gpt4 key购买 nike

我正在学习 Node ,并已经组装了一个工作服务器和框架。在与一些更有经验的开发人员交谈后,我似乎在路由 URI 方面做了不必要的工作。显然,http 模块已经内置了所有这些功能,尽管我不确定它们是什么或如何应用它们。

这是我当前的 server.js

// SERVER
var http = require('http');
var url = require('url');
var fs = require('fs');
var lib = require('scripts'); // some custom libraries I use
var path = require('path');
var NodeSession = require("node-session");
var _SESSION = new NodeSession({secret: 'Q3UBzdH9GEfiRCTKbi5MTPyChpzXLsTD'});

// uri slug -> controller file
var routes = {

// Dependencies
'/style' : 'control_style', // CSS stylesheets
'/fonts' : 'control_fonts', // Fonts
'/scripts' : 'control_scripts', // JS library and controls
'/public' : 'control_public', // Public Resources

// Page Routes
'/' : 'control_home', // root path
'/login' : 'control_login', // login path
'/logout' : 'control_logout', // logout path
'/admin' : 'control_admin', // admin panel path
'/test' : 'control_test', // test page
'/upload' : 'control_upload', // upload test page

};

// Main Loop
function start(){

var port = process.env.PORT || 8080;

http.createServer(function onRequest(request, response) {

var pathname = url.parse(request.url).pathname;

_SESSION.startSession(request, response, function(){

lib._post(request, function(_POST, form, files){ // grabs and parses post data

// file system objects that may be needed in controllers
var _SYSTEM = {fs, form, files, path, pathname};

// get the respective controller module
var module = routes[pathname];

// hack for uri's referencing public directory
if(pathname.includes('/public')) module = routes['/public'];

if(module!=null) { // load the respective controller

console.log("controller: "+module+".js");
var controller = require("../controller/"+module);
controller.data(response, request, _SYSTEM, _POST, _SESSION);

} else { // Not Found

console.log(pathname+' => Not Found');
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Path not found");
response.end();
}

});

});

}).listen(port);

console.log("Server has started.");

}

exports.start = start;

基本上,我将每个 URI 与“routes”对象中的键进行匹配并加载相应的 Controller 。 (通常,我会使用正则表达式扩展此功能,但现在只是保持简单)。

Node “http”模块(或任何其他模块)是否已经具有解析 URI 的内置函数,这样我就不必使用自定义构建的路由器?

请注意:我正在使用 native Node 并尝试避免 Express.js 来进行此特定练习

最佳答案

注意:此答案是在将此附加要求添加到答案之前编写的:“我正在使用 native Node 并尝试避免使用 Express 进行此特定练习”

有很多 Node 模块可用于简化您在这里所做的事情。

例如,您可以使用 Express:

var app = require('express')();

app.get('/path1', path1Handler);
app.get('/path2', path2Handler);
app.use('/static', express.static(pathToStaticFiles));

app.listen(3333);

等等

参见:http://expressjs.com/

关于javascript - 构建解析 URI 的 Node.js 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40730448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com