【问题标题】:correctly setup express routes正确设置快速路线
【发布时间】:2024-01-15 08:51:01
【问题描述】:

我有这个 routes.coffee 文件:

#### Routes
# We are setting up theese routes:
#
# GET, POST, PUT, DELETE methods are going to the same controller methods - we dont care.
# We are using method names to determine controller actions for clearness.

fs = require 'fs'

module.exports = (app) ->

  #   - _/_ -> controllers/index/index method
  app.all "/", (req, res, next) ->
    routeMvc("index", "index", req, res, next)
  fs.readdirSync(process.cwd() + "/app/controllers").forEach (file) ->
    controller = file.split(".")[0]
    app.all "/#{controller}", (req, res, next) ->
      routeMvc("#{controller}", "#{controller}", req, res, next)
  #   - _/**:controller**_  -> controllers/***:controller***/index method
  app.all "/:controller", (req, res, next) ->
    routeMvc(req.params.controller, "index", req, res, next)
  #   - _/**:controller**/**:method**_ -> controllers/***:controller***/***:method*** method
  app.all "/:controller/:method", (req, res, next) ->
    routeMvc(req.params.controller, req.params.method, req, res, next)
  #   - _/**:controller**/**:method**/**:id**_ -> controllers/***:controller***/***:method*** method with ***:id*** param passed
  app.all "/:controller/:method/:id", (req, res, next) ->
    routeMvc(req.params.controller, req.params.method, req, res, next)
  # Robots.txt
  app.all '/robots.txt', (req, res) ->
    req.flash()
    res.set 'Content-Type', 'text/plain'
    if app.settings.env == 'production'
      res.send 'User-agent: *\nDisallow: /signin\nDisallow: /signup\n
          Disallow: /signout\nSitemap: /sitemap.xml'
    else
      res.send 'User-agent: *\nDisallow: /'
  # If all else failed, show 404 page
  app.all "/*", (req, res) ->
    console.warn "error 404: ", req.url
    req.flash('info', '404!')
    res.render '404',
      status: 404
      user: req.user

# render the page based on controller name, method and id
routeMvc = (controllerName, methodName, req, res, next) ->
  try
    controller = require "../controllers/" + controllerName
  catch e
    console.warn "controller not found:  " + controllerName, e
    console.log(controllerName, methodName)
    next()
    return
  data = null
  console.log(controller[methodName])
  if typeof controller[methodName] is "function"
    actionMethod = controller[methodName].bind controller
    actionMethod req, res, next
  else
    console.warn "method not found: " + methodName
    next()

当我在控制台上看到以下内容时,排除localesjs 的正确方法是什么:

controller not found: locales { [Error: Cannot find module '../controllers/locales'] code: 'MODULE_NOT_FOUND' }

找不到控制器:语言环境 { [错误:找不到模块 '../controllers/js'] 代码:'MODULE_NOT_FOUND'}

因为我有一个 javascript 代码,它允许用户在不同的语言之间切换。

https://github.com/nkhine/node-blade-boiler-template/blob/master/public/js/locale.js#L169

非常感谢任何建议。

【问题讨论】:

    标签: node.js express coffeescript


    【解决方案1】:

    尝试添加这个:

    app.all /\controllers?\/(locale|js)/, (req, res) ->
      someFunction req, res
    

    之前:

    app.all "/:controller/:method", (req, res, next) ->
      ...
    

    someFunction 将处理 localejs 的情况。

    【讨论】: