首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用koa.js显示静态html文件

使用koa.js显示静态html文件
EN

Stack Overflow用户
提问于 2014-06-04 04:42:06
回答 3查看 27.9K关注 0票数 20

我想做的是在调用索引路由(即localhost:3000)时为index.html文件提供服务。

我使用koa-router进行路由,所以我的路由看起来像这样:

代码语言:javascript
复制
app.all("/", function * (next){
    //Send the file here
});

我试着像这样使用koa-static:

代码语言:javascript
复制
var serve = require('koa-static');
 app.all("/", function * (next){
        serve("index.html");
    });

但这并不管用。然后我尝试使用co-views (我现在将html文件放在public目录中):

代码语言:javascript
复制
var views = require("co-views");
var render = views("public");
app.all("/", function * (next){
    this.status = 200;
    this.body = yield render("index.html");
});

但这并不管用。

有人能告诉我我要做什么吗?

EN

回答 3

Stack Overflow用户

发布于 2014-06-09 23:11:04

有几种方法可以做到这一点,这里有两种方法。

模板引擎

最简单的方法可能是使用像swigjade这样的模板引擎来提供文件。

要安装它,请执行以下操作:

代码语言:javascript
复制
npm install -s swig

为了实现协同视图,只需执行以下操作

代码语言:javascript
复制
var views = require("co-views");
var render = views("public", { map: { html: 'swig' });
app.all("/", function * (next){
  this.body = yield render("index");
}); 

普通文件系统

或者,如果您不想使用模板引擎,可以使用普通的Node File System库。

为了能够使用它,您必须将该函数包装在promise中。

代码语言:javascript
复制
var fs = require('fs');

var readFileThunk = function(src) {
  return new Promise(function (resolve, reject) {
    fs.readFile(src, {'encoding': 'utf8'}, function (err, data) {
      if(err) return reject(err);
      resolve(data);
    });
  });
}

app.use(router.get('/', function *(){
  this.body = yield readFileThunk(__dirname + '/public/htmlfilename.html');
}));

这是一个约定。

票数 20
EN

Stack Overflow用户

发布于 2017-08-18 15:27:40

将文件流传递给koa body

这与上面使用普通文件系统的解决方案非常相似,但它利用了koa功能来传递可读的流作为响应体。因此,我们唯一需要做的就是打开一个文件的可读流,并将其传递给koa上下文体。在此之前,给koa一个提示,这是html类型的响应。

代码语言:javascript
复制
import { createReadStream } from 'fs';

public async handle(ctx, next) {
    ctx.type = 'html';
    ctx.body = createReadStream('index.html');
}
票数 17
EN

Stack Overflow用户

发布于 2017-09-28 00:20:47

使用koa-static怎么样?

代码语言:javascript
复制
app.all("/", async(ctx, next) => 
  serve(`${__dirname}/public`)(
    Object.assign(ctx, { path: 'index.html' }), 
    next)
  );
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24024566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档