我是express.js和后端路由的新手。下面是我到目前为止服务器的确切错误和源代码。任何关于问题的方向都将受到赞赏。我已经尝试在其中使用带有纯文本的res.end()
,但它仍然返回相同的错误。
谢谢大家。
_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);
});
```
答案 0 :(得分:0)
app.get('/:time',function (req,res, moment) {
var time = req.params.time;
return moment(time, 'MM-DD-YYYY').isValid();
});
在上面的代码中,你基本上已经暴露了下一个处理程序,并在此时调用它。
要访问momentjs,只需将var moment = require('moment');
放在设备顶部,无需传递任何参数。
接下来,如果您想要做的只是使用momentjs验证日期,只需重新计算结果。
例如
app.get('/:time',function (req,res) {
var time = req.params.time;
res.end( moment(time, 'MM-DD-YYYY').isValid() );
});
同样在上面的路线中,我们有/:time
这可以匹配/anything
这样的网址你可以做到这一点,但通常你会为这样的事情应用路线......例如...... {{1}然后,这会匹配网址,例如app.get('/time/:time',
来阻止来自/time/09-01-2017
等的冲突。