2

私はノードに少し慣れていません。Express と sendgrid api を使用してメールを送信しています (REST で完全に収集)。sendgrid が成功または失敗した後、json オブジェクトで応答したいと考えています。サンプルケースは次のとおりです。

var SendGrid = require('sendgrid-nodejs').SendGrid;
var sendgrid = new SendGrid(user, key);

app.get('/LGP/:email', function (req, res){
    sendgrid.send({
        to: req.params.email,
        from: 'me@example.com',
        subject: 'Hello World',
        text: 'This email sent through SendGrid'
        }, function(success, message) {
            if (!success) {
                console.log(message);
            } else {
                res.writeHead(200, { 'Content-Type': 'application/json' });
                res.write(JSON.stringify({ result: 'success' }));
                res.end(); //error occurs: "Can't use mutable header APIs after sent."
            }
        }
    );
});

私のローカル サーバー (フォアマンを使用) では、すべて正常に動作します。しかし、heroku にプッシュすると、次のスタック トレースが表示されます。

2013-02-27T22:12:46+00:00 app[web.1]: http.js:543
2013-02-27T22:12:46+00:00 app[web.1]:     throw new Error("Can't use mutable header APIs after sent.");
2013-02-27T22:12:46+00:00 app[web.1]:           ^
2013-02-27T22:12:46+00:00 app[web.1]: Error: Can't use mutable header APIs after sent.
2013-02-27T22:12:46+00:00 app[web.1]:     at ServerResponse.getHeader (http.js:543:11)
2013-02-27T22:12:46+00:00 app[web.1]:     at /app/node_modules/express/node_modules/connect/lib/middleware/logger.js:229:26
2013-02-27T22:12:46+00:00 app[web.1]:     at ServerResponse.<anonymous> (/app/node_modules/express/node_modules/connect/lib/middleware/logger.js:149:20)
2013-02-27T22:12:46+00:00 app[web.1]:     at /app/app.js:60:13
2013-02-27T22:12:46+00:00 app[web.1]:     at IncomingMessage.<anonymous> (/app/node_modules/sendgrid/lib/sendgrid.js:74:9)
2013-02-27T22:12:46+00:00 app[web.1]:     at IncomingMessage.emit (events.js:81:20)
2013-02-27T22:12:46+00:00 app[web.1]:     at HTTPParser.onMessageComplete (http.js:133:23)
2013-02-27T22:12:46+00:00 app[web.1]:     at CleartextStream.ondata (http.js:1213:22)
2013-02-27T22:12:46+00:00 app[web.1]:     at CleartextStream._push (tls.js:291:27)
2013-02-27T22:12:46+00:00 app[web.1]:     at SecurePair._cycle (tls.js:565:20)
2013-02-27T22:12:48+00:00 heroku[web.1]: Process exited with status 1
2013-02-27T22:12:48+00:00 heroku[web.1]: State changed from up to crashed

/app/app.js:60:13 は「res.end()」のある行を参照しています。私は何を間違っていますか?

4

1 に答える 1

0

アプリがローカルでも heroku でも同じように動作する可能性を最大限に高めるには、すべてのモジュールに特定のバージョンを指定"*"し、 main には使用しないようにする必要がありますdependencies

また、package.json でノードのバージョンを指定する必要があります。

"engines": {
  "node": "0.8.20"
}

(適切なバージョンを使用してください)。

于 2013-02-27T23:48:12.593 に答える