2017-09-01 86 views
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); 
}); 

```

+0

爲什麼你有時間作爲你的獲得處理程序的參數?只需在你的單位頂部放置通常需要的時刻。 'res.end()'也是正確的方法。 get請求是異步的,所以返回很可能在express中被忽略。第三個參數是'next'回調,如果你不處理請求,這就是你所調用的。 – Keith

+0

時刻是一個處理程序,因爲如果我嘗試在回調中使用時刻的方法,express會返回一個未定義的錯誤。 –

+0

如果您在javascript代碼的頂部定義了'var moment = require('moment')',那麼它不能是未定義的。就像我說的那樣,第三個參數是'next'處理程序,如果您不處理請求,就會調用它。另外,你的路由'/:time'會捕獲根URL中的所有內容,也許'/ time /:time'可能會更好..然後你會從url調用'/ time/09-01-2017' – Keith

回答

0
app.get('/:time',function (req,res, moment) { 
    var time = req.params.time; 
    return moment(time, 'MM-DD-YYYY').isValid(); 
}); 

在上面的代碼,你基本上已經暴露了下一個處理程序和稱之爲時刻。

要訪問片刻,只需將var moment = require('moment');放置在單位的頂部,而不需要傳入任何參數。

接下來,如果你想要做的所有事情都是使用momentjs的valididate日期,那麼只需res.end就是結果。

例如。

app.get('/:time',function (req,res) { 
    var time = req.params.time; 
    res.end(moment(time, 'MM-DD-YYYY').isValid()); 
}); 
在上述路線

另外,我們有/:time這將匹配的網址一樣/anything你能做到這一點,但通常你會申請一個路線是這樣的..如.. app.get('/time/:time',這將然後匹配的URL像/time/09-01-2017停止來自index.html favicon.ico等的衝突。