【问题标题】:Error: Cannot find module html错误:找不到模块 html
【发布时间】:2013-04-13 05:54:36
【问题描述】:

很久没用过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

【问题讨论】:

  • 不要将代码放在 node_modules 中!该文件夹包含依赖项,应位于应用程序的文件夹中。
  • 我以为我所有的模块文件都必须在根文件夹中?

标签: javascript node.js express


【解决方案1】:

使用

res.sendFile()

而不是

res.render().

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

这对我有用。

【讨论】:

    【解决方案2】:

    如果不是,请安装 ejs。

    npm install ejs
    

    然后在您的主文件中粘贴以下两行之后。 (如 app.js、main.js)

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

    【讨论】:

      【解决方案3】:

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

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

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

      一旦您指定了这一点,只需将您的浏览器指向文件的位置,它就会显示出来。

      如果你想渲染视图,那么你必须使用适当的渲染器。渲染列表在consolidate中定义。一旦你决定使用哪个库,只需安装它。我在这里使用胡子是我的配置文件的 sn-p

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

      这是告诉快递给

      • 在视图目录中查找要渲染的文件

      • 使用 mustache 渲染文件

      • 文件的扩展名是.html(你也可以使用.mustache)

      【讨论】:

      • 没问题。希望你像我一样喜欢node js!
      • 两年前我用它聊天!我喜欢它!
      • app.use(express.static(path.join(__dirname, 'public'))); 这可能会让一些人感到困惑。不要将浏览器指向/public 目录。将浏览器指向/根目录,它会找到位于/public目录下的静态文件。
      • 美丽的答案:)
      【解决方案4】:

      这就是我为渲染 html 文件所做的。它解决了错误。 通过在您的项目文件夹中执行以下命令来安装 consolidatemustache

      $ 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 页面将正确呈现。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 感谢您的简短回答!我只需要一行代码来修复错误。
        【解决方案6】:

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

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

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

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

        但要呈现纯 html,请参阅此帖子:Render basic HTML view?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-30
          • 1970-01-01
          • 2014-04-21
          • 2014-07-24
          • 2016-12-20
          • 1970-01-01
          • 2022-07-11
          • 1970-01-01
          相关资源
          最近更新 更多