例如:
/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必须具有类似文件名的路径。 反过来,如果我添加:文件而不是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路径?
答案 0 :(得分:0)
没有理由在Feathers中不起作用,但在生成的应用程序中,您确保 - 就像在Express中一样 - 在错误处理程序之前包含中间件(例如, middleware/index.js
here否则您将获得404。