【问题标题】:Error: Cannot find module 'html' with /:id错误:找不到带有 /:id 的模块“html”
【发布时间】:2014-04-21 00:31:58
【问题描述】:

我最近在渲染 html 页面时遇到了 express 问题。 我的应用有以下组织:

app/ server.js views/ index.html dashboard.html containers/ show.html ......

在 server.js 中我声明了以下路由:

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

app.get('/containers/:id',function(req,res){
   console.log("Inspect container");
   res.render('/views/containers/show.html');
});

在dashboard.html 中我有一个如下所示的链接:

<a href="/containers/'+data[i].Id+'">Test</a>

但是当我尝试访问以下链接时,我得到了这个错误:

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 (/root/HarborJS/node_modules/express/lib/view.js:43:49) at Function.app.render (/root/HarborJS/node_modules/express/lib/application.js:488:12) at ServerResponse.res.render (/root/HarborJS/node_modules/express/lib/response.js:759:7) at io.sockets.on.socket.on.exec.user (/root/HarborJS/server.js:32:7) at callbacks (/root/HarborJS/node_modules/express/lib/router/index.js:164:37) at param (/root/HarborJS/node_modules/express/lib/router/index.js:138:11)

我现在真的不知道该怎么办。如果我做错了什么,请告诉我。

【问题讨论】:

  • res.render 用于渲染模板,但您告诉它渲染一个基本的 HTML 文件,它不知道如何处理,因为 html 不是模板语言。你想用'+data[i].Id+' 达到什么目的? data 是什么?
  • data[i].Id 只是我从 socket.io 获得的一个 ID,这里没什么特别的。所以我该怎么做 ?为了解决这个问题,我是否应该立即切换到翡翠?

标签: node.js express routes


【解决方案1】:

res.render 用于为每个请求动态生成页面 HTML 服务器端。您已将 HTML 文件的路径传递给它,但 HTML 不是模板语言,因此会引发错误。

如果您在show.html 中没有任何模板逻辑,那么您应该不使用模板引擎将文件发回,例如

res.sendfile(__dirname + '/views/containers/show.html');

如果您确实有需要在服务器端呈现的东西,那么您应该选择一个模板引擎,其中有很多,然后重命名文件以具有模板扩展名。

【讨论】:

  • 谢谢你,你说的完全是逻辑,我应该通过阅读一些文档自己弄清楚。
  • 现在已经很清楚了.. 'render' 和 'sendFile' 方法应该做什么...谢谢伙伴
猜你喜欢
  • 2013-04-13
  • 1970-01-01
  • 2019-02-16
  • 2017-09-08
  • 2023-01-10
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多