So che ci sono altre risposte a questo, ma sembrano avere avvertenze.Instradamento angolare in HTML5mode con Node.js
This one causes a redirect, che può essere fatale per la mia app front-end che utilizza Mixpanel, e un doppio carico di Mixpanel sarà un errore di dimensione massima Stack di chiamate superato nel browser.
This one uses sendFile
che personalmente non riesco a mettermi al lavoro. Cercando di diagnosticare ciò, mi viene solo consigliato di usare express.static()
.
Attualmente il mio codice simile a questo:
home.js - Alcuni itinerari, l'ultimo destinato ad essere il sito di front-end.
var indexPath = path.resolve(__dirname, '../' + process.env.PUBLIC_FOLDER)
router.get('/:user/:stream/:slug', function(req, res, next) {
if (req.headers['user-agent'].indexOf('facebook') != -1) {
// stuff to handle the Facebook crawler
} else return next()
})
router.get('/*', function(req, res) {
express.static(indexPath)
})
server.js - Configurazione di node/esprimere
app = express();
app
.use(morgan('dev'))
.use(bodyParser.urlencoded({ limit: '50mb', extended: true }))
.use(bodyParser.json({ limit: '50mb' }))
.use('/api', require('./routes/usersRoute.js'))
.use('/', require('./routes/home'))
.on('error', function(error){
console.log("Error: " + hostNames[i] + "\n" + error.message)
console.log(error.stack)
})
http
.createServer(app).listen(process.env.PORT)
.on('error', function(error){
console.log("Error: " + hostNames[i] + "\n" + error.message)
console.log(error.stack)
})
qualche info in più
La ragione per cui si può vedere che sto cercando di utilizzare express.static()
è perché quando uso res.sendfile()
Ottengo un problema like this one dove la console dice Unexpected token '<'
. Sfortunatamente la risposta non specifica una correzione esatta e nemmeno l'interrogante che dice di aver risolto il problema ma non ha condiviso una risposta.
Nella mia prova ed errore ho aggiunto un po 'di più per esprimere, come questo
.use('/app/app.js', express.static(indexPath + '/app/app.js'))
.use('/app/views', express.static(indexPath + '/app/views'))
.use('/app/controllers', express.static(indexPath + '/app/views'))
.use('/app/directives', express.static(indexPath + '/app/views'))
.use('/app/vendor', express.static(indexPath + '/app/vendor'))
.use('/js', express.static(indexPath + '/js'))
.use('/css', express.static(indexPath + '/css'))
.use('/fonts', express.static(indexPath + '/fonts'))
.use('/images', express.static(indexPath + '/images'))
.use('/api', require('./routes/usersRoute.js'))
.all('/*', require('./routes/home'))
E nei miei home.js
percorsi file aggiunti questa
router.get('/*', function (req, res) {
res.status(200).set({ 'content-type': 'text/html; charset=utf-8' })
.sendfile(indexPath + '/index.html')
})
E nel browser posso vedere tutto il mio i file si stanno caricando, ma con l'errore <
sopra. Vedo che questa route /*/
viene chiamata centinaia di volte quando eseguo un aggiornamento, quindi penso che le configurazioni .use('...', ...)
vengano ignorate.
Ecco un altro esempio richiesto da Jonas di seguito.
var indexPath = path.resolve(__dirname, process.env.PUBLIC_FOLDER)
mongoose.connect(process.env.MONGOLAB_URI)
app = express();
app
.use(morgan('dev'))
.use(bodyParser.urlencoded({ limit: '50mb', extended: true }))
.use(bodyParser.json({ limit: '50mb' }))
.use('/api', require('./routes/usersRoute.js'))
.use('/', require('./routes/home.js'))
.use(express.static(indexPath))
.on('error', function(error){
console.log("Error: " + hostNames[i] + "\n" + error.message)
console.log(error.stack)
})
ho anche fatto lo stesso senza la linea .use('/', require('./routes/home.js'))
per provare a restringere alcun problema, ma è lo stesso risultato. La pagina verrà caricata se ho l'#
nell'URL, ma il browser rimuoverà il #
(fin qui tutto bene). Ma se premo refresh, o inserisco l'URL manualmente, sans-hashbang, darà un errore come Cannot GET /home/splash
, dove /home/splash
è il percorso che sto per fare.
Come si aggiunge una taglia a questo? Sono passati 4 giorni ... – Noah
Non sono un esperto di express, ma non ho mai visto nessuno sbagliare quando ho seguito gli esempi nelle [FAQ UI-Router] (https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions), che mostra l'uso di 'app.all' piuttosto che' router.get'. – Claies
Hai controllato che i percorsi passati a 'express.static' siano validi? Qual è il valore di 'indexPath'? – manji