节点/快速 - 服务静态不工作/如何使用服务静态文件的路由

时间:2015-05-11 17:40:27

标签: node.js express

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

我的目录结构如下:

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

我希望发生这种情况:

  • app / - 提供静态文件(例如,&#34; GET /app/controllers/controller.js"应该发送文字文件)< / LI>
  • 资产 / - 提供静态文件(例如,&#34; GET /assets/css/custom.css"应发送文字文件)< / LI>
  • 观看次数 / - 动态路由(例如,&#34; GET / partials / view1&#34;使用我设置的路由规则)

这就是我设置服务器的方式:

  ...
//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

&#34; 观点&#34;部分 工作 ,但&#34; 资产&#34;和&#34; app &#34;部分 无法工作

如何设置&#34; serve-static&#34;部分工作?我是否仍然需要一条路线 - 虽然它列出了提供静态文件?我是否还需要设置路线并执行&#34; sendFile&#34;?

谢谢!

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

更新

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

我试过了:

  ...
//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);
 ...

并重命名为&#34; app.modules.js&#34;到&#34; app-modules.js&#34;但是也没有工作:/仍然有很多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

1 个答案:

答案 0 :(得分:3)

要获得所需的行为,请更改此项:

app.use(serveStatic(appPath));

......对此:

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

较早的代码指定静态地提供app目录的内容,但它不包含路径的app部分。它基本上意味着“将appPath中的所有内容视为docroot。”因此,要在您的网络浏览器中提供(例如)app/server.js,您只需转到http://example.com/server.js http://example.com/app/server.js。通过在app.use()中指定路径,您可以获得所需的行为。