1

私は、ページを提供する際に PHP が提供する単純さのファンです。すべてがファイルシステムに基づいています。ノードで同じことをしたい。ビューに対して次のように機能するルーティング設定を 1 つ試しましたが、パブリック フォルダーが壊れました。

//using express:
app.get('*', function(req, res) {
  file = req.params[0].substr(1, req.params[0].length);
  console.log('requesting: ' + file);
  res.render(file, {locals: {
    req: req,
    params: req.query
  }});
});

そう...

Nodeでファイルシステムベース/phpスタイルのルーティングをセットアップする最良の方法は何ですか?

4

2 に答える 2

2

私はあなたが探しているものを正確に構築していると思います。私はこれを使用して.jadeファイルを提供します。明らかに、ユースケースに合わせて調整できます。

var url = require('url');
var express = require('express');
var app = express.createServer();
var fs = require('fs');

app.set("view engine", "jade");

app.use(app.router);
app.use(express.static(__dirname + '/public'));

/**
 * Generic "get" attempts to route to known JADE files.
 * If no known JADE files, then we pass routing to next() (should be static).
 */
app.get('*', function(req, res, next) {

  var pathname = url.parse(req.url).pathname.toLowerCase(); // make matching case insenstive

  // First case: with no path name, render the default index.jade
  if(!pathname) {
    res.render('index', {});
  }
  // Second case: path ending in '/' points to a folder, use index.jade from that folder
  else if (pathname === '/' || pathname.charAt(pathname.length-1) === '/' ){
    res.render(__dirname + '/views' + pathname + 'index.jade', {});
  }
  // Third case: looks like an actual file, attempt to render
  else {
    // Attempt to find the referenced jade file and render that. Note 'views' is default path.
    fs.stat( (__dirname + "/views" + pathname + '.jade'), function(err, stats){
      // There was an error, the file does not exist pass control to the static handler
      if(err || !stats) {
        next();
      }
      // We found the file, render it.
      else{
        res.render(pathname.substring(1), {});
      }
    });

  }
});

app.listen(port);

app.use()Cookie の処理、本文の解析などのステートメントがさらにあることに注意してください。また、 の 2 番目のパラメーターrenderは常に空です。{layout: xyz}レンダリングされたページに入る必要がある一般的な変数などでこれを埋めることができます。

于 2012-04-30T20:02:29.907 に答える
0

Express. static() を使用できます

例えば:

app.configure(function(){
  app.use(express.static(__dirname + '/public'));
});

app.configure(function(){
  app.use('/uploads', express.static(PATH_TO_UPLOAD_FOLDER));
});
于 2012-04-30T05:07:38.470 に答える