我有我的本地的Node.js服務器上的功能unzip()
是從下載的AWS CloudFront URL一個.json.gz
文件,並將其解壓到.json
,當服務器與node app.js
運行執行功能。Express.js - 對每個HTTP請求
從JSON文件中的帖子迴應的路線之前加載 -
app.all('*', function(req, res, next){
fs.readFile('s3posts.json', function(err, data){
res.locals.posts = JSON.parse(data);
next();
});
});
的問題是,該文件被下載並解壓當服務器開始運行,並提供相同的數據給用戶只要因爲它正在運行。除非重新啓動服務器,否則不會重新下載該文件。所以,對該數據的任何更改都不會反映出來,直到重新啓動。
我已經打過電話的上述fs.readFile()
功能從JSON文件中讀取之前app.all()
路線內unzip()
功能,但是當我請求任何頁面拋出一個錯誤 -
undefined:1
undefined
^
SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at ReadFileContext.callback (/Users/Anish/Workspace/NodeJS/unzipper/app.js:48:27)
at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:359:13)
當我在目錄中查看,我發現它下載了該文件,但未能將其解壓縮。即使下載的文件已損壞,也無法手動解壓縮。
注 - 如果文件放置在app.all()
之外,則文件下載,解壓並獲得正常服務。
如何從用戶的每個請求下載和解壓文件?
,我嘗試使用 - 'app.use(功能(REQ){ \t解壓縮(); });' @eavichay的文件下載並解壓縮成功,但我的網頁沒有被送達。瀏覽器只是在等待。我嘗試使用'next'參數並在'unzip()'之後放置'next()'函數,但是我收到錯誤 - TypeError:next不是函數。任何想法爲什麼? –
你應該調用next()回調。中間件完全按照你想要的來傳遞請求。該函數獲取請求,響應和下一個回調參數,如果希望服務器繼續處理請求,則應使用next,如果要刪除請求,則使用next(false)。 – eavichay