如何使用 feathers.js 将文件包含到 index.html?

Posted

技术标签:

【中文标题】如何使用 feathers.js 将文件包含到 index.html?【英文标题】:How to inclusion a file to index.html with feathers.js? 【发布时间】:2017-04-07 09:40:23 【问题描述】:

我正在学习羽毛,但我遇到了问题。我尝试进行类似于 php 切换的文件包含。

例如:

/src/middleware/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。如果我在 records.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 必须具有类似文件名的路径。 反过来,如果我添加 :file 而不是 records.html 以防万一,如果文件不存在,我会收到错误“哦,不!”而不是 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());
);

还有一个问题。

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 路径?

【问题讨论】:

【参考方案1】:

没有理由不能在 Feathers 中工作,但在生成的应用程序中,您必须确保 - 就像在 Express 中一样 - 在错误处理程序之前包含中间件(例如在 @987654322 @here 否则你将永远得到 404。

【讨论】:

我还有一个问题。如果我将 app.get() 添加到 /src/middleware 中的 index.js 中,我如何包含 /public 目录中的文件? 在带有const path = require('path')const filename = path.join(__dirname, '..', '..', 'public', 'index.html')的文件中

以上是关于如何使用 feathers.js 将文件包含到 index.html?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用GCC的I-flag包含多个文件夹?

如何编写将返回包含从文本文件加载的数据的字典的函数

CMake Swig:如何在包含的 .i 文件上添加依赖项

如何将 ref 添加到 Makefile 中的 1 头文件

如何从在 AWS ecs 上使用 docker 部署的应用程序获取日志

如何使用 Thymeleaf 将 html 文件包含到另一个 html 文件中