![](/img/trans.png)
[英]TypeError: You may only yield a function, promise, generator… when yielding app.listen()
[英]NodeJS - TypeError: app.listen is not a function
我知道这种问题已经存在,但是他们的回答并不能解决我的问题。
错误为“ TypeError:app.listen不是函数”;
我的完整代码如下,在此先感谢。 (PS,我在同一端口上没有任何运行)
var io = require('socket.io')(app);
var fs = require('fs');
var serialPort = require("serialport");
var app = require('http');
app.createServer(function (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
res.writeHead(200);
res.end(data);
});
}).listen(1337, '127.0.0.1');
var port = new serialPort(process.platform == 'win32' ? 'COM3' : '/dev/ttyUSB0', {
baudRate: 9600
});
port.on( 'open', function() {
console.log('stream read...');
});
port.on( 'end', function() {
console.log('stream end...');
});
port.on( 'close', function() {
console.log('stream close...');
});
port.on( 'error', function(msg) {
console.log(msg);
});
port.on( 'data', function(data) {
console.log(data);
var buffer = data.toString('ascii').match(/\w*/)[0];
if(buffer !== '') bufferId += buffer;
clearTimeout(timeout);
timeout = setTimeout(function(){
if(bufferId !== ''){
id = bufferId;
bufferId = '';
socket.emit('data', {id:id});
}
}, 50);
});
io.on('connection', function (socket) {
socket.emit('connected');
});
app.listen(80);
错误来自此行:
app.listen(80);
由于app是您的http模块,因此var app = require('http');
,您试图收听节点http模块(当然不能)。 您需要使用此http模块创建服务器,然后再收听它。
这是您对这些行所做的:
app.createServer(function (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
res.writeHead(200);
res.end(data);
});
}).listen(1337, '127.0.0.1');
基本上,http.createServer()返回一个http.server实例。 此实例具有一个listen方法,该方法使服务器接受指定端口上的连接。
所以这可以工作:
var app = require('http');
app.createServer().listen(8080);
这不能:
var app = require('http');
app.listen(8080);
http模块文档: https : //nodejs.org/api/http.html#http_http_createserver_requestlistener
这可能不是SO问题的答案,但是在进行测试的类似情况下,可以通过导出模块app
来解决相同的错误“ TypeError:app.listen不是函数”。
$ ./node_modules/.bin/mocha test
可以输出
TypeError: app.listen is not a function
解:
尝试添加到server.js
文件的底部:
module.exports = app;
清除所有代码,然后尝试
const http = require('http');
const handleRequest = (request, response) => {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
const www = http.createServer(handleRequest);
www.listen(8080);
然后访问localhost:8080 ...以查看对该页面的响应。
但是,如果您想处理页面路由,我建议您使用expressjs作为开始, 请单击此处以获取指南。一旦可行,您就可以重新添加socket.io代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.