我可以将多个函数传递给NodeJS中的http.createServer吗?

时间:2018-05-26 21:59:47

标签: node.js

我对服务器开发和NodeJS完全不熟悉,所以如果这个问题听起来很愚蠢或者这个问题已经存在,我很抱歉。

我正在遵循一个简单的NodeJS教程并构建一个简单的“Hello World”服务器。我注意到http.createServer仅使用一个函数作为其参数。

http.createServer(function(req,res) {
 res.writeHead(200, {'Content-Type' : 'text/html'});
 res.end("Hello World");
}.listen(8080);

我尝试将另一个函数传递给它,如下所示:

var http = require('http');

http.createServer(function(req,res) {
    res.writeHead(200, {'Content-Type':'text/html'});
    res.end("Hello World");
},
function (req, res) {
    res.write("Blahblah");
    res.end();
}
).listen(8080);

但点击localhost:8080只返回Hello World。

所以我想知道我是否可以将多个功能传递给它,如果没有,那么为什么。

感谢您的时间

3 个答案:

答案 0 :(得分:3)

您无法传递多项功能。如果您想要传入请求的多个侦听器,您只需为传入请求注册另一个侦听器:

const server = http.createServer(function(req,res) {
    res.writeHead(200, {'Content-Type' : 'text/html'});
    res.end("Hello World");
}.listen(8080);

// add additional listener
server.on('request', function(req, res) {
    if (req.url === "/goodbye") {
        res.writeHead(200, {'Content-Type' : 'text/plain'});
        res.end("goodbye");
    }       
});  

注意:从the doc for http.createServer()开始,它说明了传递给`hptt.createServer()的函数参数:

  

http.createServer([options] [,requestListener])

     

requestListener是一个自动添加到'请求的函数。事件

请求活动的文档为here

正如其他人所说,使用像这样的普通http服务器是非常罕见的,因为一些简单的路由几乎总是有用的,像Express这样的轻量级框架提供了非常有用的功能而没有真正妨碍任何事情你可能想做。对于Express,您可以使用以下代码:

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

// define handler for /goodbye URL
app.get('/goodbye', function(req, res) {
    res.send("goodbye");
});

// define handler for /hello URL
app.get("/hello", function(req, res) {
    res.send("hello");
});

const server = app.listen(8080);

此处表示,保留您希望处理的URL列表,然后侦听每个传入请求,将其与您要处理的URL进行比较,并调用相应的路由处理程序。它还具有许多其他用于路由的功能,例如中间件,通配符,参数化URL等......

答案 1 :(得分:0)

如果您想要多条路线,我建议您使用express之类的内容:

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

app.get('/hello', (req, res) => res.send('Hello World!'));
app.get('/world', (req, res) => res.send('Hello World!'));

app.listen(3000, () => console.log('Example app listening on port 3000!'));

答案 2 :(得分:0)

Node.js为您提供了从头开始创建自己的网络服务器的功能,除非您想创建一个全新的框架,我建议使用像expressjs这样的东西。 如果您是新手并希望创建休息服务,请查看以下教程。

Testing iterables in PHPUnit

这是一个相当简单明了的教程