我有一个这样的节点服务器:
var express = require('express');
var fs = require('fs');
var path = require('path');
var root = fs.realpathSync('.');
var app = express();
app.configure(function () {
app.use(express.static(__dirname + '/./'));
app.use(app.router);
});
app.get('/*', function (req, res) {
res.sendfile(path.join(root, './index.html'))
});
/*app.get('/dashboard', function (req, res) {
res.sendfile(path.join(root, 'index.html'))
});*/
app.listen(3000);
console.log('Listening on port 3000');
在前端,我使用 Backbone.js 路由通过HTML历史API来路由应用程序模块。因此它总是一个格式良好的URL。当我刷新页面时出现问题。它在本地节点服务器上工作正常,但当我在Microsoft Azure Cloud上部署应用程序时,刷新产生了一个问题,它说,它找不到资源。
我需要对Azure进行哪些特定的配置,以使其了解它应该为新请求提供index.html,而不是查找资源?
在apache中,我们使用.htaccess来实现这一点,但我不知道如何在azure cloud上实现这一点!
2条答案
按热度按时间ukdjmx9f1#
找到了解决办法:
你需要在根目录下有一个webconfig文件,这样才能正常工作。Azure内部只有IIS来提供这些文件。如果你仔细观察,一旦你部署了应用程序,server.js就没有用了。IIS会控制为index.html文件提供服务,因此你需要在IIS配置中做一些事情。下面是你需要放在应用程序根目录下的Web.config(区分大小写)文件:
xzv2uavs2#
您可以尝试使用一个通用的中间件,而不是一个特定于方法的路径:
据我所知,Express目前不支持特定于方法的中间件(例如
app.get(function(req, res) { ... })
)。还有一个不相关的注意事项,
var root = fs.realpathSync('.');
是不必要的,因为全局__dirname
应该得到相同的值。