节点我的应用程序如何找到index.js

时间:2016-02-29 09:02:41

标签: javascript angularjs node.js express

文件夹结构

  • bin - www.js

  • lib - jsFiles ...

  • 模特 - jsFiles ......

  • node_modules - 文件夹和文件

  • public - index.html

  • 路线 - jsFiles ......

  • index.js

  • 的package.json

  

我使用Express,angular.js。服务器从www.js开始,然后调用   index.js。之后,当我只输入" localhost:3000"它告诉我   公共/ index.html的。我没有“' /'但它告诉我   '公共/ index.html中&#39 ;.我不明白这。请告诉我   关于这个过程。

www.js

var debug = require('debug')('example-server');
var app = require(process.cwd()+'/index');

//listen at 3000 port
app.set('port',process.env.PORT || 3000);


var server = app.listen(app.get('port'),function()
{
    debug('Express server listening on port ' + server.address().port);
});

index.js

var favicon      = require('serve-favicon');
var express      = require('express');
var path         = require('path');
var logger       = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');
//Connection for DB
require('./lib/connection');
var employees    = require('./routes/employees');
var teams        = require('./routes/teams');
var app = express();

// Writing at routing table
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended:true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname,'public')));

app.use(employees);
app.use(teams);


// send 404 to errorhandler
app.use(function(err,req,res,next)
{
    var err = new Error('Not Found');
    err.status = 404;
    console.log(error);
    next(error);
});

...
...
module.exports = app;

2 个答案:

答案 0 :(得分:1)

放置文件夹的相对路径(层次结构中的一个)。

var app = require('../index');

答案 1 :(得分:0)

在express.js中,注册中间件的顺序会产生巨大的差异。

当express.js收到请求时,它从顶部开始并执行已注册的中间件。

中间件使用app.use(middleware_goes_here)在快递应用程序中注册这种类型的中间件被执行,无论请求URL是什么,另一方面,您也可以注册像app.use('/url/path',middleware_goes_here)这样的中间件,在这种情况下我们正在注册这个中间件到'/ url / path'所以这个中间件只会在你访问'/ url / path'时被执行(并且以前匹配的中间件没有服务请求而不调用next())

app.use(express.static(path.join(__dirname,'public')));代码行具有神奇功效。

您可以here (express.static ref)了解有关静态内容投放和路由的详情。

基本上发生的是,我们正在配置express.static中间件来“提供”来自“public”文件夹的静态内容。因此,当您发出任何请求并且它与公共文件夹中的静态内容匹配时,它将为其提供服务,否则express.static将按顺序调用下一个中间件。

因此,在您的情况下,实际服务器输入请求的第一个中间件是express.static,没有任何路由过滤器,因此即使没有明确定义的路由,它也会服务器index.html。如果您的public文件夹中的文件位于public/javascript/jquery.js,则后续网址会映射到http://localhost:3000/javascript/jquery.js

  

注意:您不必在URL中指定“public”,express.static的注册方式,它将服务器内容FROM“public”文件夹。

................

  

更新:默认如何在express.static中工作?

默认情况下,app.use(express.static(path.join(__dirname,'public')));这会将index.html作为默认文档。如果您想将index2.html设置为默认文档,可以通过执行以下操作来完成此操作app.use(express.static(path.join(__dirname,'public'),{index: 'index2.html'}));

希望它有所帮助。