Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs:对404中间件感到困惑_Node.js_Express_Coffeescript_Http Status Code 404 - Fatal编程技术网

Node.js nodejs:对404中间件感到困惑

Node.js nodejs:对404中间件感到困惑,node.js,express,coffeescript,http-status-code-404,Node.js,Express,Coffeescript,Http Status Code 404,所以我为我的应用程序实现了一个404中间件。我最初把它作为最后一条路线,但随后遵循建议(尤其是Express),并使用了中间件功能 但现在我感到困惑。我在我的中间件函数中放了一条调试消息,似乎每个请求实际上都在执行该中间件(因为我可以在输出中看到每个请求上的调试消息,甚至是成功的请求)!这让我很恼火,我做错了什么 这是我的应用程序代码(注意:coffeescript)。我发布整个文件是因为有时中间件、路由等可能会相互干扰,我发现的示例仅显示404中间件本身。然而,为了简洁起见,省略了一些代码:

所以我为我的应用程序实现了一个404中间件。我最初把它作为最后一条路线,但随后遵循建议(尤其是Express),并使用了中间件功能

但现在我感到困惑。我在我的中间件函数中放了一条调试消息,似乎每个请求实际上都在执行该中间件(因为我可以在输出中看到每个请求上的调试消息,甚至是成功的请求)!这让我很恼火,我做错了什么

这是我的应用程序代码(注意:coffeescript)。我发布整个文件是因为有时中间件、路由等可能会相互干扰,我发现的示例仅显示404中间件本身。然而,为了简洁起见,省略了一些代码:

#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)
  )
#省略了简洁性的所有要求
#########################################################
#连接到数据库
#########################################################
loc=process.env.LOCATION | |“本地”
db=mongoose.connect(config.db.mongoose\u auth\u local)
#########################################################
#初始化应用程序
#########################################################
app=module.exports=express()
env=process.env.NODE|env| |“开发”
如果('development'==env)
app.use(errorhandler())
app.set('views','u dirname+'/views')
app.set('view engine','jade')
#########################################################
#初始化中间件
#########################################################
app.use会话(
秘密:“myapp”,
saveUninitialized:false,
转存:错
)
app.use(express.static(u dirname+'/public'))
app.use('/bower\u components',express.static(\uu dirname+'/bower\u components'))
app.use(flash())
app.use(bodyParser.json())
use(bodyParser.urlencoded({extended:true}))
app.use(passport.initialize())
app.use(passport.session())
#########################################################
#中间件身份验证功能
#########################################################
#检查用户是否为管理员
is_admin=(请求、恢复、下一步)->
#检查用户是否为管理员,省略
LocalStrategy=require('passport-local')。策略
passport.use(新的本地策略((用户名、密码、完成)->
#passport设置,省略
)
passport.user((用户,完成)->
完成(空,用户。\u id)
)
passport.deserializeUser((id,完成)->
User.findById(id,(err,User)->
完成(错误,用户)
)
)
#########################################################
#定义用户路由
#########################################################
app.get('/',routes.index)
#还有一些路线,省略了
app.post'/login',(请求、回复、下一步)->
#登录函数,省略

#>>>>>>>>>>>带有调试输出的404中间件功能很抱歉,没有真正的“问题”,这是我方面的误解

事实上,中间件的配置和工作都是正确的

问题是我的视图中有一个“/images/logo.png”,但在我的静态文件夹中没有logo.png…因此节点正确地进入了404中间件函数:)


很抱歉用这样的问题把空间弄得一团糟。

那么您的404中间件在哪里?如果你把它放在“初始化中间件”的注释处,你应该把它移到底部。@Zlatko如果你再往下走,你会发现“定义用户路由”,下面我有一行注释“#>>带有调试输出的404中间件函数哦,没有滚动,小屏幕,它没有看到。我假设您没有在前面的路径中调用
next()
,对吗?我看这里没有什么问题。