Reputation: 153
When using node with angular 2, there is odd thing that happens that i would like to be fix. Basically if I were to type in the route in the url such as localhost:3000/about
in the browser url bar. I get Cannot GET /home. However when click on the nav bar that i made that has the same link /about. it work just fine. I know it a problem with node because originally, I was using dev-server this error didn't happen with angular 2.
angular 2 routes
const routes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent},
{ path: 'private', component: PrivateComponent},
{ path: 'title', component: TitleComponent},
{ path: 'shop', component: WelcomeComponent },
{ path: 'about', component: AboutComponent },
{ path: 'login', component: LoginComponent},
{ path: 'register', component: RegisterComponent}
];
navbar
<nav class="navbar navbar-fixed-top navbar-dark bg-inverse">
<div class="container">
<button class="navbar-toggler hidden-sm-up" type="button" data-toggle="collapse" data-target="#exCollapsingNavbar">
☰
</button>
<div class="collapse navbar-toggleable-xs" id="exCollapsingNavbar">
<a class="navbar-brand" [routerLink]="['/home']">Vietnam Films</a>
<div class="nav navbar-nav">
<a class="nav-item nav-link active" [routerLink]="['/home']">
Home <span class="sr-only">(current)</span>
</a>
<a class="nav-item nav-link" [routerLink]="['/about']">About</a>
<a class="nav-item nav-link" [routerLink]="['/film']">Film News</a>
<a class="nav-item nav-link" [routerLink]="['/shop']" *ngIf="auth.loggedIn()">Shop</a>
<a class="nav-item nav-link" [routerLink]="['/checkout']" *ngIf="auth.loggedIn()" >Checkout</a>
<a class="nav-item nav-link" (click)="auth.login()" *ngIf="!auth.loggedIn()">Login</a>
<a class="nav-item nav-link" (click)="auth.logout()" *ngIf="auth.loggedIn()" >Logout</a>
</div>
<div class="nav navbar-nav float-xs-right">
<db-cart-menu *ngIf="auth.loggedIn()" ></db-cart-menu>
</div>
</div>
</div>
</nav>
node backend
var express = require('express');
var fs = require('fs');
var jwt = require('express-jwt');
var favicon = require('serve-favicon')
var http = require('http');
var https = require('https');
var path = require('path');
var logger = require('morgan');
var session = require('express-session');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
var cors = require('cors');
var config = require('./config');
// models for the mongodb
var Director = require('./models/directors');
var Film = require('./models/films');
var Product = require('./models/products');
var User = require('./models/users');
var app = express();
// Create an HTTP service.
http.createServer(app).listen(3000);
console.log("listen on 3000");
// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(8000);
// links the node server to the webpage
app.use(express.static(path.join(__dirname, '../')));
app.use(cors());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(cookieParser());
//the rest is the rest api routes
Upvotes: 3
Views: 1419
Reputation: 40647
Since /about
is not defined as a route in your server-side, either you need to define them 1 by 1 or you need to add something like
app.get('/*', function(req, res, next) {
res.sendFile('index.html', { root: __dirname });
});
To redirect every refresh to angulars routing.
Upvotes: 3