Ответ 1
Вы могли бы сделать что-то вроде этого. Предположим, что это html файл, относящийся к файлу .js:
app.get('/', function(req, res){
res.sendfile('default.html', { root: __dirname + "/relative_path_of_file" } );
});
Я использую это, чтобы иметь Node.js/Express setup как рудиментарный веб-сервер - он просто обслуживает набор статических страниц без какой-либо другой обработки. Я бы хотел, чтобы он всегда служил /default.html, когда браузер извлекает сайт без имени файла.
var express = require("express");
var app = express();
var port = process.env.PORT || 5000;
app.configure(function(){
app.use(express.bodyParser());
});
app.use(express.logger());
app.use(express.static(__dirname ));
app.listen(port, function() {
console.log("Listening on " + port);
});
Я пробовал использовать res.sendfile и res.redirect, но без особого успеха; Я, очевидно, что-то пропустил, так как в итоге я получил ошибку "не имеет метода".
Что бы вы сказали, это самый простой способ достижения моей цели?
Вы могли бы сделать что-то вроде этого. Предположим, что это html файл, относящийся к файлу .js:
app.get('/', function(req, res){
res.sendfile('default.html', { root: __dirname + "/relative_path_of_file" } );
});
Я кратко рассмотрел рекомендации по обслуживанию общей папки и указания страницы по умолчанию для обслуживания. После рассмотрения документации "Express middleware" мое решение выглядит следующим образом:
var express = require('express');
var app = express();
var options = {
index: "coming-soon.html"
};
app.use('/', express.static('app', options));
var server = app.listen(8081, function () {
var host = server.address().address;
var port = server.address().port;
console.log('my app is listening at http://%s:%s', host, port);
});
Я добавил свои собственные варианты с дополнительным "мясом" на нем, чтобы продемонстрировать, как вы можете включить маршрутизацию. Я поместил весь следующий код в файл под названием "routes.js":
var express = require('express'),
painting = require('./controllers').Painting,
gallery = require('./controllers').Gallery;
module.exports.initialize = function(appSvr, router) {
router.get('/paintings', painting.list);
router.get('/galleries', gallery.list);
appSvr.use('/', router);
appSvr.use('/', express.static(__dirname + '/../public', { index: 'index.html' }));
};
Затем я вызываю этот файл в файле "configure.js", который потребуется в файле "server.js":
var routes = require('./routes'),
express = require('express'),
bodyParser = require('body-parser');
module.exports = function(appSvr) {
appSvr.use(bodyParser.urlencoded());
appSvr.use(bodyParser.json());
routes.initialize(appSvr, new express.Router());
return appSvr;
};
Я не видел, как лучше обрабатывать маршрутизацию, но этот код работает для меня.
Вам понравилась бы некоторая обратная связь!
Странно, что никто не упомянул перенаправление.
app.get('/', function(req, res){
res.redirect('/default.html');
});
В этом -of course- предполагается, что у вас есть "default.html" в публичном пути. Вы можете установить свой публичный путь с помощью:
app.use(express.static(relative_path_to_project_root));