Error: Cannot find module html

匿名 (未验证) 提交于 2019-12-03 01:52:01

问题:

I have not used Node.js for a long time and never used express. When I started my application, it just returned :

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) 

The error occured when I launched test.html. Here's the code :

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); 

My path :

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

Why ?

EDIT :

This is my new app.configure :

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

But it returns :

 path is not defined 

回答1:

I am assuming that test.html is a static file.To render static files use the static middleware like so.

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

This tells express to look for static files in the public directory of the application.

Once you have specified this simply point your browser to the location of the file and it should display.

If however you want to render the views then you have to use the appropriate renderer for it.The list of renderes is defined in consolidate.Once you have decided which library to use just install it.I use mustache so here is a snippet of my config file

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

What this does is tell express to

  • look for files to render in views directory

  • Render the files using mustache

  • The extension of the file is .html(you can use .mustache too)



回答2:

Simple way is to use the EJS template engine for serving .html files. Put this line right next to your view engine setup:

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


回答3:

I think you might need to declare a view engine.

If you want to use a view/template engine:

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

or

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

But to render plain-html, see this post: Render basic HTML view?.



回答4:

This is what i did for rendering html files. And it solved the errors. Install consolidate and mustache by executing the below command in your project folder.

$ sudo npm install consolidate mustache --save 

And make the following changes to your app.js file

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

And now html pages will be rendered properly.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!