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請求是異步的,所以返回很可能在express中被忽略。第三個參數是'next'回調,如果你不處理請求,這就是你所調用的。 – Keith
時刻是一個處理程序,因爲如果我嘗試在回調中使用時刻的方法,express會返回一個未定義的錯誤。 –
如果您在javascript代碼的頂部定義了'var moment = require('moment')',那麼它不能是未定義的。就像我說的那樣,第三個參數是'next'處理程序,如果您不處理請求,就會調用它。另外,你的路由'/:time'會捕獲根URL中的所有內容,也許'/ time /:time'可能會更好..然後你會從url調用'/ time/09-01-2017' – Keith