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