浏览器中的“未找到”明文,当试图在koajs上使用swig渲染模板时

时间:2015-10-09 13:09:58

标签: javascript node.js web-services koa swig-template

我在node.js和swig模板引擎上使用koajs来学习和编写Web服务。目前,浏览器只会加载“未找到”字样。在我尝试将程序拆分为多个文件之前,代码工作正常。在那之后,我试图让它工作,即使将所有内容重新组合在一个文件中,也没有成功。

'./templates/base.html'的html文件确实存在。 为了澄清,当我运行'node --harmony index.js'时没有错误,我确实得到输出'侦听端口3000'。但是当我尝试在浏览器中加载页面时,我得到了“未找到”的纯文本。

以下是我的文件:

index.js:

var routes = require('./routes');
var server = require('./server');


routes.baseroute

server.init(3000);

server.js:

var serve = require('koa-static');

var koa = require('koa');

var app = koa();


var init = function(port){

  app.use(serve('./public'));

  app.listen(port);
  console.log('\n   ---> listening on port '+port);
};

exports.init = init;

routes.js:

var koa = require('koa');
var route = require('koa-route');

var views = require('./views');

var app = koa();


var baseroute = app.use(route.get('/', views.baseview));

exports.baseroute = baseroute;

views.js:

var swig = require('swig');

var data = require('./data');


var baseview = function*(){
  var tpl = swig.compileFile('./templates/base.html');
  this.body = tpl(data.basedata);
};

exports.baseview = baseview;

data.js:

var basedata = {user: 'testuser123'};

exports.basedata = basedata;

1 个答案:

答案 0 :(得分:0)

所以真正发生的事情是,在将它们拆分成自己的文件后,您在自己的文件中创建了一个单独的koa实例。 请参阅: -
var app = koa();
server.jsroutes.js中,koa将其视为单独的应用。在koa中有可能拥有多个应用程序,但您必须安装它们才能拥有任何类型的链接。 首先,找到您希望链接发生的主文件。我猜测它是server.js并从其文件(app)中公开其他route.js。现在,当您关联它们时,只需使用mount('/', require('./routes'));koa就会将它们作为一个单元进行链接。简而言之: -

//routes.js
var koa = require('koa');
...
...
var app = koa();
app.use(route.get('/', views.baseview));

module.exports = app;

//server.js
var app = require('koa');
var mount = require('koa-mount');
var routes = require('./routes');
...
...
var init = function(port){

  app.use(serve('./public'));
  app.use(mount('/route', routes));
  app.listen(port);
  console.log('\n   ---> listening on port '+port);
};   
exports.init = init;