Tengo una aplicación muy simple, así que no pensé que necesitaba una plantilla de front-end completa como angular, y realmente no quería usar Jade.
app.get('*', function(req, res) { res.sendFile(__dirname + '/public/index.html'); });Básicamente, devuelvo un archivo html y puedo llamar a otros archivos html como
login.html signup.htmlPero lo que me confunde es que mis rutas no se llaman. Por ejemplo, envío una solicitud GET a /login pero no hay salida "LOGIN GET"
//Editar: incluso con req, res, puedo eliminar esta función a continuación y seguir recibiendo index.html
app.get('/login',function(req,res){ console.log("LOGIN GET") res.sendFile( path.join( __dirname, 'public', 'login.html' )); });¿Cómo se envía login.html al cliente si no se llama a mi ruta?
Faltan los parámetros req y res para el controlador de ruta. Para archivos estáticos también puede seguir https://expressjs.com/en/starter/static-files.html
app.get('/login',function(req, res){ console.log("LOGIN GET") res.sendFile( path.join( __dirname, 'public', 'login.html' )); });Debe utilizar el enrutador Express.
var router = express.Router();Y luego, puedes obtener
router.get("/login",function(req,res){ console.log("LOGIN GET") res.sendFile( path.join( __dirname, 'public', 'login.html' )); });Supongo que primero está declarando la ruta general:
app.get('*', function(req, res) { res.sendFile(__dirname + '/public/index.html'); }); app.get('/login',function(req,res){ console.log("LOGIN GET") res.sendFile( path.join( __dirname, 'public', 'login.html' )); }); Debido a que /login coincide con * , Express también utilizará la primera ruta para manejar las solicitudes de /login . En general, con Express primero debe declarar rutas más específicas:
app.get('/login',function(req,res){ console.log("LOGIN GET") res.sendFile( path.join( __dirname, 'public', 'login.html' )); }); app.get('*', function(req, res) { res.sendFile(__dirname + '/public/index.html'); }); La razón por la que funcionan los otros archivos HTML es que probablemente también esté usando express.static() (pero no lo muestre).