/ / nodejs: verwirrt über 404 Middleware - node.js, Express, Kaffeescript, http-status-code-404

nodejs: verwirrt über 404 Middleware - node.js, Express, Kaffeescript, http-Status-Code-404

Also habe ich eine 404-Middleware für meine App implementiert. Ich hatte es anfangs als letzte Route, folgte dann aber Empfehlungen (vor allem Express " FAQ) und benutzte eine Middleware-Funktion.

Aber jetzt bin ich verwirrt. Ich füge eine Debug-Nachricht in meine Middleware-Funktion ein und es scheint, dass JEDE Anfrage tatsächlich diese Middleware ausführt (da ich die Debug-Nachricht bei jeder Anfrage in der Ausgabe sehen kann, sogar erfolgreiche Anfragen)! Das ärgert mich, was mache ich falsch?

Hier ist mein App-Code (Achtung: Kaffeescript). Ich poste die gesamte Datei, weil manchmal Middleware, Routen usw. sich gegenseitig stören können. Die Beispiele, die ich gefunden habe, zeigen lediglich die 404-Middleware. Aus Gründen der Kürze wurde jedoch etwas Code ausgelassen:

#Omitted all requires for brevity

#########################################################
# Connect to DB
#########################################################
loc = process.env.LOCATION || "local"
db = mongoose.connect(config.db.mongoose_auth_local)

#########################################################
# Initiallize the application
#########################################################
app = module.exports = express()

env = process.env.NODE_ENV || "development"
if ("development" == env)
app.use(errorhandler())

app.set("views", __dirname + "/views")
app.set("view engine","jade")
#########################################################
# Initiallize the middleware
#########################################################
app.use session(
secret: "myapp",
saveUninitialized: false,
resave: false
)

app.use(express.static(__dirname + "/public"))
app.use("/bower_components", express.static(__dirname + "/bower_components"))
app.use(flash())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true}))
app.use(passport.initialize())
app.use(passport.session())

#########################################################
# Middleware authentication functions
#########################################################
# Check user is admin
is_admin = (req, res, next) ->
#check if user is admin, omitted


LocalStrategy = require("passport-local").Strategy
passport.use(new LocalStrategy( (username, password, done) ->
#passport setup, omitted
)

passport.serializeUser( (user, done) ->
done(null, user._id)
)

passport.deserializeUser((id,done) ->
User.findById(id, (err, user) ->
done(err, user)
)
)

#########################################################
# Define user routes
#########################################################
app.get("/", routes.index)
#some more routes, omitted

app.post "/login", (req, res, next) ->
#login function, omitted

#>>>>>>>>>>>THE 404 MIDDLEWARE function with the debug output <<<<<<<<<<
app.use((req, res, next) ->
debug("404 middleware")
err = new Error("Not Found")
res.status = 404
res.render("404")
)

app.use( (error, req, res, next) ->
res.status(500)
res.render("500")


port = process.env.PORT || config.app.port
info("Configured port for the application is : " + port)

app.listen(port, () ->
console.log("Express server listening on port %d in %s mode", port, app.settings.env)
)

Antworten:

0 für die Antwort № 1

Es tut mir leid, aber es gab kein echtes "Problem", es war ein Missverständnis von meiner Seite ...

Tatsächlich war die Middleware vollständig konfiguriert und funktionierte einwandfrei.

Das Problem ist, dass ich ein "/images/logo.png" in meiner Ansicht hatte, aber es gab kein logo.png in meinem statischen Ordner ... daher hat der Knoten die 404-Middleware-Funktion korrekt eingegeben :)

Entschuldigen Sie bitte, dass Sie den Platz mit einer solchen Frage überladen haben.