0
express.jsとバックエンドのルーティングが初めてです。以下は、今まで私のサーバーで持っていた正確なエラーとソースコードです。問題が何であるかについてのあらゆる方向性は評価されるだろう。私はすでにres.end()
をプレーンテキストで使用しようとしましたが、それでも同じエラーが返されています。moment.jsを使用したエクスプレスルーティングの問題
ありがとうございました。このコードで
`
_http_outgoing.js:489
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:489:11)
at ServerResponse.setHeader (_http_outgoing.js:496:3)
at Array.write (/app/node_modules/finalhandler/index.js:254:9)
at listener (/app/node_modules/on-finished/index.js:169:15)
at onFinish (/app/node_modules/on-finished/index.js:100:5)
at callback (/app/node_modules/ee-first/index.js:55:10)
at IncomingMessage.onevent (/app/node_modules/ee-first/index.js:93:5)
at emitNone (events.js:105:13)
at IncomingMessage.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1059:12)
:
`
//server.js
// Set static routes and set view engine as pug
app.use(express.static('public'));
app.set('view engine', 'pug');
// Pug entry point to API
app.get('/', function (req, res) {
res.render('index', { title: 'Timestamp Microservice API'})
});
app.get('/:time',function (req,res, moment) {
var time = req.params.time;
return moment(time, 'MM-DD-YYYY').isValid();
});
// listen for requests :)
var listener = app.listen(process.env.PORT, function() {
console.log('Your app is listening on port ' + listener.address().port);
});
`` `
なぜあなたは取得ハンドラのパラメータとして瞬間を持っていますか?あなたのユニットの上部に通常必要なものを入れてください。 'res.end()'も正しい方法です。 get要求は非同期であるため、返品は急行ではほとんど無視されます。 3番目のパラメータは 'next'コールバックです。リクエストを処理しない場合は、これを呼び出します。 – Keith
モーメントは、コールバック内でモーメントのメソッドを使用しようとすると、明示的な返り値が未定義のエラーであるため、モーメントがそこにあるハンドラです。 –
javascriptコードの先頭に 'var moment = require( 'moment')'を定義した場合、それを未定義にすることはできません。 3番目のパラメータが 'next'ハンドラであると言ったように、リクエストを処理しない場合、これが呼び出されます。あなたのルート '/:time'は、ルートURLからすべてを捕まえるでしょう。'/time /:time'がもっと良いかもしれません。あなたは '/ time/09-01-2017'のようにurlから呼び出すでしょう。 – Keith