1

在搜索並經歷幾個StackOverflow問題時,我得到的是:頭部來自服務器提供的響應,所以這不是問題。Angular 4+ Universal - 在/ 404頁面組件中爲頭部發送狀態碼404

所以決定從server.ts文件解決它,但無法找到任何線索。

下面是我的server.ts文件的任何幫助將真正帶我走出這個卡住的過程。

import 'reflect-metadata'; 
import 'zone.js/dist/zone-node'; 
import { platformServer, renderModuleFactory } from '@angular/platform-server' 
import { enableProdMode } from '@angular/core' 
import { AppServerModuleNgFactory } from '../dist/ngfactory/src/app/app.server.module.ngfactory' 
import * as express from 'express'; 
import { readFileSync } from 'fs'; 
import { join } from 'path'; 

const PORT = process.env.PORT || 4000; 

enableProdMode(); 

const app = express(); 

let template = readFileSync(join(__dirname, '..', 'dist', 'index.html')).toString(); 

app.engine('html', (_, options, callback) => { 
const opts = { document: template, url: options.req.url }; 

    renderModuleFactory(AppServerModuleNgFactory, opts) 
.then(html => callback(null, html)); 
}); 

app.set('view engine', 'html'); 
app.set('views', 'src') 

app.get('*.*', express.static(join(__dirname, '..', 'dist'))); 

app.get('*', (req, res) => { 
res.render('index', { req }); 
}); 

app.listen(PORT,() => { 
console.log(`listening on http://localhost:${PORT}!`); 
}); 
+0

你試過我的解決方案嗎? – Moema

+0

是的,但仍然停留在這個,你能告訴我更多的例子,我可以如何使用它。 –

回答

1

你可以通過供應商到renderModuleFactory方法(見Angular docs)。

通過這種方式,您可以將請求和響應對象注入到Angular App中。 This post例如很好地解釋了這種方法。

然後,在404組件中,如果您位於服務器端,則可以獲取響應對象並設置404狀態。

+0

謝謝你的幫助,你能否給我一個例子來使用它 –