Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node JS Routing URL Conflict

Each piece of this code works individually but when put together, the Article section (third set) will not load. I am fairly new to coding so I was hoping for someone to point me in the right direction. I assume this is because the first route is executed and it never hits the second route...but I don't know how to fix it.

// Adds "www." to all URLs

app.all('*', function(req, res, next) {
  if (req.headers.host.match(/^www/) == null) {
    res.redirect('http://www.' + req.headers.host + req.url);
  } else {
    next();     
  }
});

// Serves the .html file but displays without .html in the URL

app.get('*', function(req,res){
  var pages = ['/now', '/home', '/itinerary','/exploreourroots','/contact','/credits'];
  if (pages.indexOf(req.url.toLowerCase()) !== -1) {
    res.sendFile(__dirname + '/public' + req.url + '.html');
  };
});

// Loads Articles from the database on the home page

app.get('/home', function(req, res) {
  var query = 'SELECT a.title,a.author,a.cover_photo,a.html_loc,a.date_published,c.name country_name FROM articles a INNER JOIN countries c ON c.id=a.country_id ORDER BY a.date_published desc;'
  connection.query(query, function(err, rows, fields) {
    var list = [];
      for (var i = 0;i < rows.length; i++) {
        list.push({html_loc: rows[i].html_loc,country_name: rows[i].country_name,cover_photo: rows[i].cover_photo,title: rows[i].title,author: toAuthorPhoto(rows[i].author),date_published: toArticleDate(rows[i].date_published)});
      } 
    res.contentType('application/json');
    res.send(list);
  });
});

Thanks for the help!

like image 341
TreeOfNations Avatar asked Feb 05 '26 14:02

TreeOfNations


1 Answers

I'm not sure what intentions you have.

What if user type in browser www.mydomain.com/home. You want to return static html file (home.html), which is done by second router. Or you want to serve then article from db (third route)?

If you want to serve article from db when url is /home, then replace order of second and third routes:

app.get('/home', function(req, res) { ... });


app.get('*', function(req,res){ ... });

if you want to serve static html when your route is /home and also you want to have possibility to serve articles, then as before replace orders and additionally change /home router to /article. Then you will serve articles if url is /article :

app.get('/article', function(req, res) { ... });


app.get('*', function(req,res){ ... });
like image 151
Krzysztof Sztompka Avatar answered Feb 07 '26 03:02

Krzysztof Sztompka



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!