0

私は羽を学んでいて、問題があります。PHP の switch と同様のファイル インクルードを試みます。

例えば:

/src/ミドルウェア/index.js

'use strict';

const handler = require('feathers-errors/handler');
const notFound = require('./not-found-handler');
const logger = require('./logger');
const cheerio = require('cheerio')
const fs = require('fs');

const path = require('path')
const filename = path.join(__dirname, '..', '..', 'public')

module.exports = function() {
  // Add your custom middleware here. Remember, that
  // just like Express the order matters, so error
  // handling middleware should go last.

const app = this;

app.get('/record.html', function(req, res) {

  var html = fs.readFileSync(filename + '/index.html');
  var home = fs.readFileSync(filename + '/record.html');
  var $ = cheerio.load(html);
  $('#content').html(home);
  res.send($.html());
});

  app.use(notFound());
  app.use(logger(app));
  app.use(handler());
};

ファイルを修正しました。私はあなたが書いているようにやっていると確信しましたが、残念ながら私には問題があります。http://127.0.0.1:3030/record.htmlを開くと、混合ファイルなしで record.html のみが取得されます。たとえば、record.html の record.html からパスを変更した場合

app.get('/records.html', function(req, res) {

  var html = fs.readFileSync(filename + '/index.html');
  var home = fs.readFileSync(filename + '/record.html');
  var $ = cheerio.load(html);
  $('#content').html(home);
  res.send($.html());
});

このままでもいいのですが、URLにオリジナルパスを入れたいです。URL には、ファイル名のようなパスが必要です。次に、records.html の代わりに :file を追加すると、ファイルが存在しない場合、「Oh no!」というエラーが発生します。代わりに 404。

例えば:

app.get('/:file.html', function(req, res) {

  var file = req.params.file

  var html = fs.readFileSync(filename + '/index.html');
  var home = fs.readFileSync(filename + '/' + file + '.html');
  var $ = cheerio.load(html);
  $('#content').html(home);
  res.send($.html());
});

そして、まだ1つの質問。

const path = require('path')
const filename = path.join(__dirname, '..', '..', 'public')

app.js ファイルが const パスの場合、パブリック ディレクトリからファイルを提供する場合、ミドルウェアやサービスなどの各ファイルに上記のコードを配置する必要がありますか? このアプリのすべてのファイルに対してグローバル変数を使用することはできませんか?

app.js

'use strict';

const path = require('path');                          <-- HERE const path
const serveStatic = require('feathers').static;
const favicon = require('serve-favicon');
const compress = require('compression');
const cors = require('cors');
const feathers = require('feathers');
const configuration = require('feathers-configuration');
const hooks = require('feathers-hooks');
const rest = require('feathers-rest');
const bodyParser = require('body-parser');
const socketio = require('feathers-socketio');
const middleware = require('./middleware');
const services = require('./services');

const app = feathers();

app.configure(configuration(path.join(__dirname, '..')));

app.use(compress())
  .options('*', cors())
  .use(cors())
  .use(favicon( path.join(app.get('public'), 'favicon.ico') ))
  .use('/', serveStatic( app.get('public') ))
  .use(bodyParser.json())
  .use(bodyParser.urlencoded({ extended: true }))
  .configure(hooks())
  .configure(rest())
  .configure(socketio())
  .configure(services)
  .configure(middleware);

module.exports = app;

1) http://127.0.0.1:3030/record.htmlなどのファイル名のパスを持つ混合ファイルを含むページを表示するにはどうすればよいですか?

2) app.get() で :file を使用する場合、ファイルが存在しないときにエラー 404 を表示するにはどうすればよいですか?

3) ファイルまたは混合ファイルを提供する各ファイルで const パスを使用する必要がありますか?

4

1 に答える 1

0

Feathers で動作しない理由はありませんが、生成されたアプリケーションでは、Express の場合と同様に、エラー ハンドラの前にミドルウェアを含める必要があります (たとえば、middleware/index.js ここでそうしないと、常に 404 が返されます。

于 2016-11-23T16:37:51.397 に答える