2017-03-14 10 views
-1

私はNodeJsとZeroMQで基本的なアプリケーションを開発していますが、現在はエラーに直面しています。私はプログラムが "複数回送信"することを提案する解決策を読んだが、私は1つの "送信"方法しか持たない。ブラウザへエラー:送信後にヘッダーを設定できません。 at ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:356:11)

response.status(200).send(JSON.stringify(message.toString())); 
response.end(); 

.send().end()の両方の回答と重複している:問題はここにある

var express = require('express'); 
var app = express(); 
var bodyParser = require("body-parser"); 
var server_port = "3000"; 

/** app settings **/ 
var zeromq = require("zeromq"); 
var socket = zeromq.socket("req");/* sends request */ 
var protocol = "tcp://"; 
var ip = "192.000.0.000"; //server 
var socket_port = "9998"; 
var url = protocol + ip + ":" + socket_port; 

/*header settings*/ 
app.use(function (request, response, next) { 
    response.setHeader('Content-Type', 'text/plain'); 
    response.setHeader('Access-Control-Allow-Origin', 'http://localhost:8888'); 
    response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); 
    response.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); 
    response.setHeader('Access-Control-Allow-Credentials', true); 
    next(); 
}); 


app.use(bodyParser()); 

/** paths **/ 
app.post('/request', function (request, response) { 
    var command = request.body; 

    //connect to port 
    socket.connect(url, function (error) { 
     if (error) { 
      console.log("connection error : ", error); 
      process.exit(0); 
     } 
    }); 

    //response to front end 
    socket.send(JSON.stringify(command)); 

    //recieve request 
    socket.on('message', function (message) { 

     //output message to console 
     console.log("Recieved message @ : " + (new Date().toDateString()) + " : " + message.toString()); 

     //send response 
     response.status(200).send(JSON.stringify(message.toString())); 
    }); 
}); 

// test purposes 
app.get('/recieve', function (request, response) { 
    response.send("{ 'led': 'on' }").end(); 
}); 

/** start app **/ 
app.listen(server_port); 

console.log("Server started on port: " + server_port); 

答えて

1

...以下のコードを参照してください。どちらか一方だけを使用しますが、両方を連続して使用することはできません。

文字列を文字列にすることで、フロントエンドが機能する素敵なJSONを取得しないようにすることができます(あとでJSONを必ず再解析してください)。私は誰もがいつもすべてをストリング化し、JSONでの作業を拒否している理由を知らないのですか?キャプテン?

+0

はい私は文字列を文字列化していることを発見しました。これは、愚かな間違いの1つで、頭を上げてくれます。 – meji

+0

あなたの問題は解決しましたか? –

+0

問題を解決したと思われる "response.headersSent"ブール値を発見して使用しました。あなたの答えは私の問題を直接解決しませんでした。しかし、それは私が注意を払った良い練習の面で正しいです。 – meji

関連する問題