添加新的nodejs服务器路径

leo*_*ero 1 http node.js server

我创建了以下 Nodejs 服务器:

var http = require('http');

var serverFunction = function(req, res) {
    if (req.url === '/') {
        //does something
    }
}

http.createServer(serverFunction).listen(3000);
Run Code Online (Sandbox Code Playgroud)

现在我想添加另一个路径(例如:/hello),但我不想更改serverFunction。

我怎样才能做到这一点?

jfr*_*d00 5

简单的http服务器(无框架)方法如下。

但是,创建多个独立请求处理程序的更高级别方法是使用Express. 虽然从技术上来说不需要做你所要求的事情,但 Express 的构建就是为了让这样的任务变得简单。

具有多个路由处理程序的简单 Express 服务器如下所示:

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

app.get('/', function(req, res) {
    // handle the / route here
});

app.get('/hello', function(req, res) {
    // handle the /hello route here
});

app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

Express 框架的构建允许您简单地添加路由,如上所示。它还包括许多很多功能,例如中间件处理和访问许多预构建的中间件模块,例如 cookie 处理、会话处理、帖子处理等......


严格回答您原来的问题(尽管我认为这不是添加更多路由处理程序的最简单方法),如果您想使用纯 http 模块而不将第二条路由添加到现有侦听器,您可以侦听服务器上的request事件

var http = require('http');

var serverFunction = function(req, res) {
    if (req.url === '/') {
        //does something
    }
}

var server = http.createServer(serverFunction).listen(3000);

server.on('request', function(req, res) {
    // see all incoming requests here
    if (req.url === '/hello') {
        // process /hello route here
    }
});
Run Code Online (Sandbox Code Playgroud)

事实上,如果您仔细阅读 http 服务器文档,您会发现您serverFunction只不过是事件的自动注册侦听器request,并且与事件样式接口一样,如果您选择,您可以为该事件创建更多侦听器。