Tôi biết có những câu trả lời khác cho vấn đề này nhưng dường như chúng có sự thận trọng.Định tuyến góc trong HTML5mode với Node.js
This one causes a redirect, có thể gây tử vong cho ứng dụng giao diện người dùng của tôi sử dụng Mixpanel và tải hai lần Mixpanel sẽ xảy ra lỗi Kích thước ngăn xếp cuộc gọi tối đa đã vượt quá trong trình duyệt.
This one uses sendFile
cá nhân tôi không thể làm việc. Đang cố gắng chẩn đoán điều đó, tôi chỉ được khuyên sử dụng express.static()
.
Mã hiện tại của tôi trông giống như sau:
home.js - Một số tuyến đường, tuyến cuối cùng dự định là trang web mặt trước.
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 - cấu hình nút/bày tỏ
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)
})
Một số biết thêm
Lý do bạn có thể thấy tôi đang cố gắng để sử dụng express.static()
là bởi vì khi tôi sử dụng res.sendfile()
Tôi gặp sự cố like this one nơi bảng điều khiển cho biết Unexpected token '<'
. Thật không may câu trả lời không chỉ định sửa lỗi chính xác và người hỏi cũng không cho biết họ đã khắc phục sự cố nhưng không chia sẻ câu trả lời.
Trong cuộc thử nghiệm và lỗi của tôi, tôi đã thêm một số chi tiết để thể hiện, như thế này
.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'))
Và trong home.js
tuyến My Files thêm này
router.get('/*', function (req, res) {
res.status(200).set({ 'content-type': 'text/html; charset=utf-8' })
.sendfile(indexPath + '/index.html')
})
Và trong trình duyệt tôi có thể nhìn thấy tất cả của tôi các tệp đang tải, nhưng với lỗi <
ở trên. Tôi thấy con đường này /*/
đang được gọi là hàng trăm lần khi tôi làm mới vì vậy tôi nghĩ rằng các cấu hình .use('...', ...)
đang bị bỏ qua.
Đây là một ví dụ khác được Jonas yêu cầu bên dưới.
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)
})
Tôi cũng đã thực hiện tương tự mà không có đường dây .use('/', require('./routes/home.js'))
để thử thu hẹp mọi sự cố nhưng kết quả tương tự. Trang sẽ tải nếu tôi có #
trong URL, nhưng trình duyệt sẽ xóa #
(cho đến nay rất tốt). Nhưng nếu tôi nhấn làm mới, hoặc đặt trong URL bằng tay, sans-hashbang, nó sẽ cung cấp cho một lỗi như Cannot GET /home/splash
, nơi /home/splash
là bất cứ con đường nào tôi sẽ.
Làm cách nào để thêm tiền thưởng vào tài khoản này? Đã 4 ngày rồi ... – Noah
Tôi không phải là chuyên gia thể hiện, nhưng tôi chưa bao giờ thấy ai gặp lỗi khi theo dõi các mẫu trong [FAQ-Router FAQ] (https://github.com/angular-ui/ui-router/wiki/Câu hỏi thường gặp), hiển thị bằng 'app.all' thay vì' router.get'. – Claies
Bạn đã kiểm tra các đường dẫn được chuyển đến 'express.static' có hợp lệ không? Giá trị của 'indexPath' là gì? – manji