2016-10-01 6 views
0

Ich weiß diese Frage Art existiert bereits, aber sie Antworten haben mein Problem nicht behoben.NodeJS - TypeError: app.listen ist keine Funktion

Der Fehler ist "TypeError: app.listen ist keine Funktion";

Mein voller Code ist unten, danke im Voraus. (PS, ich habe nichts auf demselben Port)

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); 
+0

Hallo Adeneo, ich bin ziemlich neu in NodeJS, Bitte erläutern Sie, was Sie meinen? –

+0

Ich bin nur ein wenig verwirrt, Sie verwenden 'app' in der ersten Zeile, wo Sie es an socket.io übergeben, aber es ist nicht bis zur fünften Zeile definiert? – adeneo

+0

Es gibt einige Beispiele in der Dokumentation, haben Sie versucht, diese -> https://nodejs.org/api/http.html#http_event_connect – adeneo

Antwort

2

der Fehler aus dieser Linie kommen.

app.listen(80); 

Da App ist Ihr HTTP-Modul var app = require('http');, Sie haben versucht, den Knoten HTTP-Modul zu hören (und gut können Sie nicht). Sie müssen einen Server mit diesem HTTP-Modul erstellen und dann darauf hören.

Dies ist, was Sie mit diesen Zeilen haben:

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'); 

Grundsätzlich http.createServer() gibt eine http.server Instanz. Diese Instanz verfügt über eine listen-Methode, die dazu führt, dass der Server Verbindungen am angegebenen Port akzeptiert.

dies So arbeiten:

var app = require('http'); 
app.createServer().listen(8080); 

dies nicht möglich ist:

var app = require('http'); 
app.listen(8080); 

Die Dokumentation http-Modul: https://nodejs.org/api/http.html#http_http_createserver_requestlistener

+0

Sie mein Freund sind super! Das hat für mich funktioniert, vielen Dank. –

0

lösche alle Codes, die Sie dort haben und versuchen

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); 

Dann besuchen Sie localhost: 8080 ... eine Antwort zu sehen auf die Seite.

Aber wenn Sie Seite Routing behandeln möchten, schlage ich vor Express.js für einen Start mit click here for guides Sobald dies funktioniert, können Sie dann Ihre socket.io Codes hinzufügen zurück in

1

Dies ist vielleicht nicht eine Antwort auf SO Frage, aber in ein ähnlicher Fall mit Test der gleiche Fehler "TypeError: app.listen ist keine Funktion" wahrscheinlich kann durch den Export Modulgelöst werden.

$ ./node_modules/.bin/mocha test 

ausgeben kann

TypeError: app.listen is not a function 

Lösung:

Versuchen Sie, den Boden der server.js Datei hinzufügen:

module.exports = app; 
Verwandte Themen