如何使用express快速提供相同的文件?

时间:2014-08-19 01:44:59

标签: node.js angularjs express

有什么方法可以随时提供相同的文件吗?

所以,如果他们访问website.com/ajsdflkasjd,它仍然提供与website.com/asdnw相同的文件

我想使用express with node。

我拥有的文件是静态html文件,而不是玉文件。

顺便说一下,我想要这样做的原因,如果你想知道的话,我有一个angularjs应用程序,为我处理所有路由。所以,我需要做的只是提供一页,它将负责其余部分。

提前致谢!

5 个答案:

答案 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);

Working example

使用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>');
});