/ / nodejs: zmätený okolo 404 middleware - node.js, express, coffeescript, http-status-code-404

nodejs: zmätený okolo 404 middleware - node.js, express, coffeescript, http-status-code-404

Takže som implementoval middleware pre svoju aplikáciu. Spočiatku som to mal ako poslednú cestu, ale potom nasledovala odporúčania (konkrétne Express " FAQ) a používala funkciu middleware.

Ale teraz som zmätený. Vložil som debug správu do mojej middleware funkcie a zdá sa, že každá požiadavka skutočne spúšťa tento middleware (ako môžem vidieť ladiacu správu na každej žiadosti na výstupe, dokonca aj úspešné požiadavky)! To ma otravuje, čo robím zle?

Tu je môj kód aplikácie (pozrite si: coffeescript). Odovzdávam celý súbor, pretože niekedy môže medzi sebou vzájomne ovplyvňovať middleware, trasy atď. A príklady, ktoré som našiel, ukazujú iba samotný middleware 404. Napriek tomu vynechal nejaký kód pre stručnosť:

#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)
)

odpovede:

0 pre odpoveď č. 1

Je mi ľúto, ale nebol tam žiadny skutočný "problém", bolo to nedorozumenie z mojej strany ....

V skutočnosti bol middleware nakonfigurovaný a fungoval správne.

Problém je, že som mal podľa môjho názoru "/images/logo.png", ale v mojej statickej zložke nebol žiadny logo.png ... takže uzol správne vložil do middleware funkcie 404 :)

Ospravedlňujeme sa za to, že priestor s takouto otázkou.