Я знаю, что есть другие ответы на это, но они, похоже, имеют оговорки.
Это вызывает перенаправление, что может быть фатальным для моего внешнего приложения, которое использует Mixpanel, а двойная загрузка Mixpanel будет максимальным размером стека вызовов Превышена ошибка в браузере.
Этот использует sendFile
, который я лично не могу заставить работать. Пытаясь диагностировать это, мне просто рекомендуется использовать express.static()
.
В настоящее время мой код выглядит следующим образом:
home.js - Некоторые маршруты, последний из которых должен быть интерфейсом.
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 - настройка node/express
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 )
})
Дополнительная информация
Причина, по которой я пытаюсь использовать express.static()
, заключается в том, что, когда я использую res.sendfile()
, я получаю проблему как этот, где консоль говорит Unexpected token '<'
. К сожалению, ответ не указывает точное исправление, и ни один из участников опроса не говорит, что исправил проблему, но не дал ответа.
В моей пробной версии и ошибке я добавил еще несколько выражений, например
.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' ) )
И в моих home.js
файлах маршрутов добавлено это
router.get( '/*', function ( req, res ) {
res.status( 200 ).set( { 'content-type': 'text/html; charset=utf-8' } )
.sendfile( indexPath + '/index.html' )
})
И в браузере я вижу, что все мои файлы загружаются, но с ошибкой <
выше. Я вижу, что этот маршрут /*/
вызывается сотни раз, когда я делаю обновление, поэтому я думаю, что конфигурации .use( '...', ... )
игнорируются.
Вот еще один пример, запрошенный Йонасом ниже.
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 )
})
Я также сделал то же самое без строки .use( '/', require( './routes/home.js' ) )
, чтобы попытаться сузить любую проблему, но это тот же результат. Страница будет загружаться, если у меня есть #
в URL-адресе, но браузер удалит #
(пока это так хорошо). Но если я нажму обновить или поместил URL вручную, sans-hashbang, он даст ошибку, например, Cannot GET /home/splash
, где /home/splash
- это тот путь, к которому я собираюсь.