可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.