Nodo de aprendizaje – Express carpeta pública no funciona

Así que soy nuevo en nodos y trato de aprender a usar la biblioteca express con él. Sin embargo, el problema que estoy tratando de averiguar es por qué los archivos en mi carpeta /public no parecen ser contenidos como contenido estático.

Aquí está mi código:

 var http = require('http'); var port = process.env.port || 1337; var express = require('express'); var handlebars = require('express3-handlebars'); var path = require('path'); var application = express(); application.use(express.static(path.join(__dirname, 'public'))); application.engine('handlebars', handlebars({ defaultLayout: 'main' })); application.get('/', function(req, res){ res.render('index.handlebars', { someProp: 3 }); }); application.listen(port); 

Y mi estructura de directorio:

 / - server.js (the above referenced file) / Views - index.handlebars / Layouts - main.handlebars / public - ServeMe.txt 

Mi entendimiento fue que application.use(express.static(path.join(__dirname, 'public'))); se suponía que configuraba el servidor para responder a cualquier solicitud en la carpeta pública con ese recurso si se encontraba. ¿Qué estoy haciendo mal? Curiosamente, fue más fácil configurar los manillares como el motor de visualización que hacer que esta carpeta pública funcionara = D

EDITAR: La URL completa que estoy intentando solicitar: http://localhost:1337/public/serveme.txt

He intentado la sensibilidad a mayúsculas (lo que debería ser un problema), y eso tampoco funcionó.

La URL completa que estoy intentando solicitar: http://localhost:1337/public/serveme.txt

Ese es tu problema. Cualquier cosa dentro del directorio que usted designe como contenido estático está disponible directamente desde la URL base. http://localhost:1337/serveme.txt solicitar http://localhost:1337/serveme.txt en http://localhost:1337/serveme.txt lugar.

Si solo desea servir archivos estáticos desde /public , puede pasar una cadena como primer argumento:

 application.use("/public", express.static(path.join(__dirname, 'public'))); 

Desde la referencia de la API Express

 app.use(express.static(__dirname + '/public')); 

Esta línea sirve a su carpeta pública en la URL raíz de su aplicación, lo que significa que las siguientes solicitudes son válidas y no dan un error 404.

// GET /javascripts/jquery.js // GET /style.css // GET /favicon.ico

app.use toma también un primer argumento opcional que le permite especificar en qué URL de solicitud desea que se sirva el contenido. El primer argumento predeterminado es “/”, lo que significa que su contenido estático se publicará en la URL base. Si desea que su contenido estático no se sirva en el nivel raíz, como lo hace actualmente su código, consulte el siguiente ejemplo (nuevamente tomado de la documentación)

 app.use('/static', express.static(__dirname + '/public')); 

Esta línea sirve de nuevo a su carpeta pública, pero en la URL pública / de su aplicación, hace que las siguientes solicitudes sean válidas sin un error 404.

(URL de ejemplo: http://localhost:1337/static/anythingInYourPublicFolder )

// GET /static/javascripts/jquery.js // GET /static/style.css // GET /static/favicon.ico

¿Qué URL estás tratando de cargar? No debe incluir “public” en sus URL, por lo tanto, curl -v 'http://localhost:1337/ServeMe.txt' .

    Intereting Posts