使用moment.js快速路由问题

时间:2017-09-01 00:31:33

标签: javascript node.js express momentjs

我是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);
});

```

1 个答案:

答案 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等的冲突。