有什么方法可以随时提供相同的文件吗?
所以,如果他们访问website.com/ajsdflkasjd,它仍然提供与website.com/asdnw相同的文件
我想使用express with node。
我拥有的文件是静态html文件,而不是玉文件。
顺便说一下,我想要这样做的原因,如果你想知道的话,我有一个angularjs应用程序,为我处理所有路由。所以,我需要做的只是提供一页,它将负责其余部分。
提前致谢!
答案 0 :(得分:12)
const app= require('express')()
// static file serve
app.use(express.static(__dirname))
// not found in static files, so default to index.html
app.use((req, res) => res.sendFile(`${__dirname}/index.html`))
app.listen(3000)
var express = require('express');
var bodyParser = require('body-parser')
var path = require('path')
var app = express();
// url encoding
app.use(bodyParser.urlencoded({extended:false}));
// gzip
// redirect all html requests to `index.html`
app.use(function (req, res, next) {
if (path.extname(req.path).length > 0) {
// normal static file request
next();
}
else {
// should force return `index.html` for angular.js
req.url = '/index.html';
next();
}
});
// static file serve
app.use(express.static(__dirname))
app.listen(3000)
答案 1 :(得分:1)
以下是我在项目中使用angularjs表达的内容。除非浏览器请求包含extname的资源文件(图像,css,js等),否则它将始终发送index.html
。
var express = require('express'); var app = express(); app.configure(function () { // url encoding app.use(express.urlencoded()); // gzip app.use(express.compress()); // redirect all html requests to `index.html` app.use(function (req, res, next) { if (path.extname(req.path).length > 0) { // normal static file request next(); } else { // should force return `index.html` for angular.js req.url = '/index.html'; next(); } }); // static file serve app.use(express.static(__dirname)); });
答案 2 :(得分:1)
Express 4的基本配置是:
var express = require('express');
express()
.get(/.*/, function(req, res) {
res.sendFile('index.html', {
root: __dirname
});
})
.listen(8080);
使用GZip,BodyParser等的那些片段非常酷,但如果您只是想测试单页应用,我认为过于复杂。当然,您可以在需要时添加所有这些“生产资料”。
了解更多:
答案 3 :(得分:1)
这是一个使用ExpressJs创建虚拟主机的简单实现,每当返回index.html
时var express = require('express');
var app = express();
var vhost = require('vhost');
// Function to create virtualhost
function createVhost(domain,rootDirectory){
var exp = express();
exp.use(express.static(rootDirectory));
exp.get(/.*/,function(req,res){
res.sendFile('index.html',{root:rootDirectory});
})
app.use(vhost(domain,exp));
}
// Virtual Host to create
createVhost('example.com','/home/[user]/[www]/[example.com]');
createVhost('othersite.com','/home/[user]/[www]/[othersite.com]');
// Start Server
app.listen(80,function(){
console.log('Node server on port 80');
});
记住:
在“/ etc / host”(在linux中)添加域
127.0.0.1 example.com
127.0.0.1 othersite.com
在终端中使用“sudo”为端口80运行“app.js”
~/home/[server]$ sudo node app.js
答案 4 :(得分:0)
您既可以在角度也可以在节点侧执行此操作。
在Node端,您可以执行以下操作:
res.sendfile('<ur html file path');
在Angular中,如果你使用ui-router,你可以使用
$urlRouterProvider.otherwise('/otherwise');
并且还需要定义其他状态
$stateProvider
.state("otherwise", { url : '/urPage'...})
如果您使用ngRoute,则可以执行
$routeProvider.otherwise({redirectTo: '/urPage'});
<强>更新强>
由于您的路由器未配置为显示默认的urPage,因此在服务器中您可以使用以下内容:
var app = express.createServer();
app.get('/urPage',function(req,res){
res.sendfile('<ur html page>');
});