404 手动刷新
404 on manual refresh
我正在构建我的第一个 MEAN 应用程序,Angular 6. 0.2,Express 4.16.0
由于 Angular CLI 和 Express 生成器
,文件已经生成
与 MongoDB 的连接完美 运行,实际上,一切正常,但手动刷新...
根据我已经看过的帖子,问题应该出在路由器上(记住我想使用 Angular 路由器)。
到目前为止,我的 app.js 文件有 2 条路线:
var indexRouter = require('./routes/index'); // Express generated
var apiRouter = require('./routes/book');
其次是...
app.use(express.static(path.join(__dirname, 'public'))); // Express generated
app.use(express.static(path.join(__dirname, 'dist/myProjectFolder')));
app.use(express.static(path.join(__dirname, 'dist/myProjectFolder')));
还有……
app.use('/', indexRouter); // Express generated
app.use('/api, apiRouter);
之后我有了默认的错误处理程序(Express 生成的)。
索引路线:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
编辑 01 — 现在在应用第一个建议的解决方案后出现 "Path is not defined" 错误。
EDIT 02 — 由于建议的解决方案,问题已解决(另请参阅评论)。但是 router.get('/', function... 中断了对数据的访问(错误 200)。如果您遇到相同的问题,请仅使用特定的问题,例如 router.get(' /poney', function... 不是 /(除非有人知道如何修复它)。
编辑 3 — 经过进一步调查,您可以使用
拥有一个 "magical" 路由器
router.get(/^\/(?!api).*/, function(req, res) {
req.sendFile(path.join(__dirname, '.. /path/to/your/index.html'));
});
将以下内容添加到您的路由器:
router.get('/', function(req, res) {
res.sendFile(path.join(__dirname, '../index.html')); // make sure index is accesed, in my example the node server would be in a server folder, so I need to go back a directorie with ../ where index.html can be hit.
});
router.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, '../index.html'));
});
如果您有其他 url 需要用户直接访问,例如管理和登录屏幕,请添加以下内容:
router.get('/login', function(req, res) {
res.sendFile(path.join(__dirname, '../index.html'));
});
router.get('/admin', function(req, res) {
res.sendFile(path.join(__dirname, '../index.html'));
});
这个想法是,您会将用户发送到 angulars index.html 页面,路由器将在其中发挥其魔力,而不是直接使用节点进行渲染,[=19 是不可能的=].
我正在构建我的第一个 MEAN 应用程序,Angular 6. 0.2,Express 4.16.0
由于 Angular CLI 和 Express 生成器
,文件已经生成与 MongoDB 的连接完美 运行,实际上,一切正常,但手动刷新...
根据我已经看过的帖子,问题应该出在路由器上(记住我想使用 Angular 路由器)。
到目前为止,我的 app.js 文件有 2 条路线:
var indexRouter = require('./routes/index'); // Express generated
var apiRouter = require('./routes/book');
其次是...
app.use(express.static(path.join(__dirname, 'public'))); // Express generated
app.use(express.static(path.join(__dirname, 'dist/myProjectFolder')));
app.use(express.static(path.join(__dirname, 'dist/myProjectFolder')));
还有……
app.use('/', indexRouter); // Express generated
app.use('/api, apiRouter);
之后我有了默认的错误处理程序(Express 生成的)。
索引路线:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
编辑 01 — 现在在应用第一个建议的解决方案后出现 "Path is not defined" 错误。
EDIT 02 — 由于建议的解决方案,问题已解决(另请参阅评论)。但是 router.get('/', function... 中断了对数据的访问(错误 200)。如果您遇到相同的问题,请仅使用特定的问题,例如 router.get(' /poney', function... 不是 /(除非有人知道如何修复它)。
编辑 3 — 经过进一步调查,您可以使用
拥有一个 "magical" 路由器router.get(/^\/(?!api).*/, function(req, res) {
req.sendFile(path.join(__dirname, '.. /path/to/your/index.html'));
});
将以下内容添加到您的路由器:
router.get('/', function(req, res) {
res.sendFile(path.join(__dirname, '../index.html')); // make sure index is accesed, in my example the node server would be in a server folder, so I need to go back a directorie with ../ where index.html can be hit.
});
router.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, '../index.html'));
});
如果您有其他 url 需要用户直接访问,例如管理和登录屏幕,请添加以下内容:
router.get('/login', function(req, res) {
res.sendFile(path.join(__dirname, '../index.html'));
});
router.get('/admin', function(req, res) {
res.sendFile(path.join(__dirname, '../index.html'));
});
这个想法是,您会将用户发送到 angulars index.html 页面,路由器将在其中发挥其魔力,而不是直接使用节点进行渲染,[=19 是不可能的=].