Node / Express – Serve-static不工作/如何使用服务静态文件的路由

我在路由和服务静态文件方面遇到了一些麻烦。

我的目录结构是这样的:

app/ --server.js --controllers/ --directives/ --etc. assets/ --img/ --css/ --etc. views/ --partials/ --view1.jade --view2.jade --index.jade --layout.jade --etc. 

我想要这样的事情发生:

  • 应用 / – 提供静态文件(例如,“GET /app/controllers/controller.js”应发送文字文件)
  • 资产 / – 提供静态文件(例如,“GET /assets/css/custom.css”应发送文字文件)
  • views / – dynamic路由(例如,“GET / partials / view1”使用我设置的路由规则)

这是我如何设置我的服务器:

  ... //PATHS: var viewsPath = path.join(__dirname, '..', 'views'); var appPath = path.join(__dirname, '..', 'app'); var assetsPath = path.join(__dirname, '..', 'assets'); ... //SERVE-STATIC: app.set('views', viewsPath); app.use(serveStatic(appPath)); app.use(serveStatic(assetsPath)); ... //ROUTES: // serve index and view partials app.get('/', routes.index); //Partials app.get('/partials/:name', routes.partials); ... 

但是,当我访问索引时会发生这种情况:

 [.../app]$ node app.server.js **Node Version: v0.12.2 **Express Version: 4.12.3 Path to views: /myproject/views Static serving: /myproject/app Static serving: /myproject/assets Express server listening on port 3000 GET / 304 765.837 ms - - GET /assets/css/app.css 404 9.851 ms - 31 GET /assets/css/bootstrap.min.css 404 1.837 ms - 41 GET /assets/css/bootstrap-theme.min.css 404 0.569 ms - 47 GET /assets/css/custom.css 404 0.787 ms - 34 GET /assets/libs/angular/angular.min.js 404 0.458 ms - 47 GET /app/app.modules.js 404 0.639 ms - 31 GET /app/services/services.js 404 0.560 ms - 37 GET /app/controllers/controllers.js 404 1.474 ms - 43 GET /app/filters/filters.js 404 0.662 ms - 35 GET /app/directives/directives.js 404 1.853 ms - 41 GET /assets/js/jquery.min.js 404 3.824 ms - 36 GET /assets/js/bootstrap.min.js 404 0.804 ms - 39 GET /assets/libs/angular/angular-bootstrap.min.js 404 0.624 ms - 57 GET /assets/libs/angular/angular-bootstrap-prettify.min.js 404 0.721 ms - 66 GET /assets/img/logo.png 404 0.465 ms - 39 GET /favicon.ico 404 1.216 ms - 24 

意见 ”部分起作用 ,但“ 资产 ”和“ 应用 ”部分不起作用

我如何设置“服务静态”部分? 我是否仍然需要一个路由 – 虽然它列出来服务于静态文件? 我仍然需要build立一个路线,并执行“sendFile”?

谢谢!

///////////////////////////

更新:

///////////////////////////

我试过这个:

  ... //PATHS: var viewsPath = path.join(__dirname, '..', 'views'); var appPath = path.join(__dirname, '..', 'app'); var assetsPath = path.join(__dirname, '..', 'assets'); ... //SERVE-STATIC: app.set('views', viewsPath); app.use(serveStatic('app', appPath)); //<--- Changed app.use(serveStatic('assets', assetsPath)); //<--- Changed ... //ROUTES: // serve index and view partials app.get('/', routes.index); //Partials app.get('/partials/:name', routes.partials); ... 

还将“app.modules.js”重命名为“app-modules.js”,但是也没有工作:/仍然获得大量的404:

 GET / 200 645.235 ms - 1867 GET /assets/css/app.css 404 9.209 ms - 31 GET /assets/css/bootstrap.min.css 404 2.609 ms - 41 GET /assets/css/bootstrap-theme.min.css 404 1.297 ms - 47 

为了得到你想要的行为,改变这个:

 app.use(serveStatic(appPath)); 

对此:

  app.use('/app', serveStatic(appPath)); 

前面的代码指定静态地提供app目录的内容,但不包括path的app部分。 它基本上意味着“将appPath所有内容都appPath根据”。 因此,要获取(例如) app/server.js在您的Web浏览器中提供,您只需访问http://example.com/server.js不是 http://example.com/app/server.js 。 通过在app.use()指定path,您将获得所需的行为。