中间件无法连接HTTP服务器

时间:2016-01-19 12:51:25

标签: javascript node.js express connect

我正在阅读Professional Node.js,并且我正在尝试了解连接HTTP中间件框架。我创建了一个简单的中间件,它返回一个用自定义测试字符串回复的函数:

function replyText(text) {
  return function(req, res) {
    res.end(text);
  };
}

module.exports = replyText;

但是当我尝试在连接服务器中使用此中间件时。 Node给出了一个错误:

/Users/socomo22/work/hello_world_app_v2.js:8
var app = connect.createServer(replyText('Hello World!'));
                  ^
TypeError: undefined is not a function

但当我只使用:

var app = connect();
app.listen(8080)

它运行时没有任何错误。我不明白我是否在做任何语法上的错误。我如何使用这个简单的中间件?这是我的连接服务器文件:

var connect = require('connect');

// middlewares
var replyText = require('./reply_text');

var app = connect();

var app = connect.createServer(replyText('Hello World!'));
app.listen(8080, function() {
  console.log('listening on 8080 port')
});

2 个答案:

答案 0 :(得分:1)

正如documentation指出的那样,使用use API来安装中间件和http模块来创建服务器实例,尽管您可以使用connect作为指向创建一个实例{{3 }}

正如@FranciscoPresencia指出的那样,当您需要本地模块时添加.js扩展名是可选的。

var replyText = require('./reply_text.js');

所以你的代码应该是这样的,我测试了它。按预期工作

var connect = require('connect')
var http = require('http')
var app = connect();

// middlewares
var replyText = require('./reply_text.js');
app.use(replyText('Hello World!'));

http.createServer(app).listen(8080, function() {
  console.log('listening on 8080 port')
});

注意:尽量避免使用 8080,80 等端口作为其他应用可能使用的保留端口。这有时可能导致节点失败。

添加输出屏幕截图供您参考

here

答案 1 :(得分:0)

这里你可以用这种方式启动服务器......

var connect = require('connect');
var http = require('http');
var app = connect();
var replyIN = require('./connetFile.js')
app.use(replyIN('Hello there m back again'));
http.createServer(app).listen(8888,function(){console.log('Server has started');});

这是你的connectFile.js

function replyIN(text){                                                                                              
    return function (req, res) {                                                                                      
        res.end(text);                                                                                                 
    };                                                                                                               
};                                                                                                                   
module.exports = replyIN;