错误:找不到模块html

时间:2013-04-19 18:36:48

标签: javascript node.js express

我很长时间没有使用Node.js而且从未使用过Express。当我开始申请时,它刚刚返回:

Error: Cannot find module 'html'
  at Function.Module._resolveFilename (module.js:338:15)
  at Function.Module._load (module.js:280:25)
  at Module.require (module.js:364:17)
  at require (module.js:380:17)
  at new View (C:\Users\fr\node_modules\express\lib\view.js:42:49)
  at Function.app.render (C:\Users\fr\node_modules\express\lib\application.js:483:12)
  at ServerResponse.res.render (C:\Users\fr\node_modules\express\lib\response.js:755:7)
  at allClients (C:\Users\fr\node_modules\apps\chat.js:13:7)
  at callbacks (C:\Users\fr\node_modules\express\lib\router\index.js:161:37)
  at param (C:\Users\fr\node_modules\express\lib\router\index.js:135:11)

我启动test.html时发生错误。这是代码:

var io = require('socket.io');
var express = require('express');

var app = express(),
http = require('http'),
server = http.createServer(app),
socket = require('socket.io').listen(server);

app.configure(function(){
    app.use(express.static(__dirname));
});
app.get('/', function(req, res, next){
    res.render('./test.html');
});

server.listen(8333);

我的路径:

node_modules/
    express/
    socket.io/
    apps/
        chat.js
        test.html

为什么?

编辑:

这是我的新app.configure:

app.configure(function(){
    app.use(express.static(path.join(__dirname, 'public')));
});

但它返回:

 path is not defined

6 个答案:

答案 0 :(得分:50)

我假设test.html是一个静态文件。要像这样渲染静态文件use静态中间件。

app.use(express.static(path.join(__dirname, 'public')));

这告诉express要在应用程序的公共目录中查找静态文件。

指定完毕后,只需将浏览器指向文件的位置即可显示。

如果你想要渲染视图,那么你必须为它使用适当的渲染器。渲染列表在consolidate中定义。一旦你决定使用哪个库就安装它。我使用胡子所以这是我的配置文件的片段

var engines = require('consolidate');

app.set('views', __dirname + '/views');
app.engine('html', engines.mustache);
app.set('view engine', 'html');

这是做什么告诉快递

  • 查找要在views目录中呈现的文件

  • 使用小胡子

  • 渲染文件
  • 该文件的扩展名为.html(您也可以使用.mustache)

答案 1 :(得分:22)

简单的方法是使用EJS模板引擎来提供.html文件。将此行放在视图引擎设置旁边:

app.engine('html', require('ejs').renderFile);

答案 2 :(得分:3)

这就是我为渲染html文件所做的。它解决了错误。 通过在项目文件夹中执行以下命令,安装合并小胡子

$ sudo npm install consolidate mustache --save

app.js 文件进行以下更改

var engine = require('consolidate');

app.set('views', __dirname + '/views');
app.engine('html', engine.mustache);
app.set('view engine', 'html');

现在html页面将正确呈现。

答案 3 :(得分:3)

如果没有安装ejs。

npm install ejs

然后仅将以下两行粘贴到主文件中。 (例如app.js,main.js)

app.set('view engine', 'html');

app.engine('html', require('ejs').renderFile);

答案 4 :(得分:2)

我认为你可能需要声明一个视图引擎。

如果您想使用视图/模板引擎:

app.set('view engine', 'ejs');

app.set('view engine', 'jade');

但要渲染plain-html,请参阅此帖:Render basic HTML view?

答案 5 :(得分:1)

使用

res.sendFile()

代替

res.render()

您要做的是发送整个文件。

这对我有用。