简体   繁体   中英

Express in NodeJS: URL param breaks routing

I'm trying to use express to serve my index.html, its dependancies as well as handle url params. For some reason, adding a URL param seems to break the pathing.

  • My basic nodeJS webapp has the following folder structure:
|- server.js (nodeJS server code)
|- public (dir)
     | - app.js (app logic dependancy)
     | - index.html (base HTML file to be served from server.js)
  • index.html is importing app.js as follows:

<script type="text/javascript" src="app.js"></script>

  • My express routes are as follows:
app.use(express.static(__dirname + '/public'));

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});
 
app.get('/:country', (req, res) => {
   res.sendFile(__dirname + '/index.html', {country:req.params.country});
}

I want the app to be served even when the country param is used. However, when I add the URL param route, the above route stops working because express looks for index.html in the folder root, resulting in a 404. Eg: http://localhost:3000/usa

Error: ENOENT: no such file or directory, stat '/Users/john/Projects/TestApp/index.html'

However, when I add the URL param route, the above route stops working because express looks for index.html in the folder root, resulting in a 404. Eg: http://localhost:3000/usa

Error: ENOENT: no such file or directory, stat '/Users/john/Projects/TestApp/index.html'

You should add public to the directory path, then.

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/public/index.html');
});

Or, to work cross-platform:

const path = require("path")
app.get("/", (req, res) => {
    res.sendFile(path.join(__dirname, "public", "index.html"))
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM