我想做的是在调用索引路由(即localhost:3000)时为index.html文件提供服务。
我使用koa-router进行路由,所以我的路由看起来像这样:
app.all("/", function * (next){
//Send the file here
});我试着像这样使用koa-static:
var serve = require('koa-static');
app.all("/", function * (next){
serve("index.html");
});但这并不管用。然后我尝试使用co-views (我现在将html文件放在public目录中):
var views = require("co-views");
var render = views("public");
app.all("/", function * (next){
this.status = 200;
this.body = yield render("index.html");
});但这并不管用。
有人能告诉我我要做什么吗?
发布于 2014-06-09 23:11:04
有几种方法可以做到这一点,这里有两种方法。
模板引擎
最简单的方法可能是使用像swig或jade这样的模板引擎来提供文件。
要安装它,请执行以下操作:
npm install -s swig为了实现协同视图,只需执行以下操作
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中。
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');
}));这是一个约定。
发布于 2017-08-18 15:27:40
将文件流传递给koa body
这与上面使用普通文件系统的解决方案非常相似,但它利用了koa功能来传递可读的流作为响应体。因此,我们唯一需要做的就是打开一个文件的可读流,并将其传递给koa上下文体。在此之前,给koa一个提示,这是html类型的响应。
import { createReadStream } from 'fs';
public async handle(ctx, next) {
ctx.type = 'html';
ctx.body = createReadStream('index.html');
}发布于 2017-09-28 00:20:47
使用koa-static怎么样?
app.all("/", async(ctx, next) =>
serve(`${__dirname}/public`)(
Object.assign(ctx, { path: 'index.html' }),
next)
);https://stackoverflow.com/questions/24024566
复制相似问题