0

アプリのドメイン検索をすぐに実行しようとすると、エクスプレス サーバーは 1 回のクエリで終了します。意味的には、いくつかのコードを再配置する必要があると感じていますが、どれかはわかりません。

 var ee = new eventEmitter;
 var queries = new Array();
 ee.on('next', next_search);

 function next_search() {
     search(queries[a]);
     if (queries.length == a) process.exit(0);
     ++a;
 }

 function search(x) {
     dns.resolve(x, function (err) {
         if (!err) {
             console.log('bad: ' + x)
             ee.emit('next')
         } else {
             console.log('good: ' + x)
             ee.emit('next')
         }
     });
 }

 app.get('/', function (req, res) {
     res.sendfile(__dirname + '/index.html');
 });

 app.post('/search', function (req, res) {
     domain = req.param('domain');
     queries.push(domain);
     search(queries[queries.length]);
 });

 var a = 0;

 http.createServer(app).listen(app.get('port'), function () {
     console.log("Express server listening on port " + app.get('port'));
 });
4

2 に答える 2

2

あなたのコードでこの行を見ました

if (queries.length == a) process.exit(0);

next_search()a = 0 を初期化すると、初めて実行されたときにアプリが終了します。

于 2013-08-03T01:22:02.917 に答える
0

エクスプレスを起動していません。

http.createServerは応答関数を受け取りますが、未定義の関数である app を指定します。

app は、 のように高速オブジェクトであると想定していますrequire('express')()

次の場所にある http.createServer のドキュメントを参照してください。

http://www.nodejs.org/api/http.html#http_http_createserver_requestlistener

にある express.js のドキュメントを参照してください。

http://expressjs.com/api.html

次のようなことを試してください:

var a = 0;

var ee = new eventEmitter;   // pretty sure this is wrong, but I will leave that to you.
var queries = [];
ee.on('next', next_search);

function next_search() {
    search(queries[a]);
    if(queries.length == a) process.exit(0);
    ++a;
 }

function search(x) {
   dns.resolve(x, function (err) {
        if (!err) {
                console.log('bad: ' + x)
                ee.emit('next');
        } else {
                console.log('good: ' + x)
                ee.emit('next');
        }
    });
}

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

app.post('/search', function(req, res) {
    domain = req.param('domain');
    queries.push(domain);
    search(queries[queries.length]);
});

app.get('/', function (req, res) {
     res.sendfile(__dirname + '/index.html');
});

app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
}

app.listen(8080);  // whatever port you want to bind to.
于 2013-08-03T01:22:17.837 に答える