无法设置节点并将其表示为服务文件
我使用的是Windows 7.我在全局安装了节点0.10.12和最新版本的express和express-generator。 I无法设置节点并将其表示为服务文件
创建了一个名为nodetest1
的新快速项目,并使用npm install
成功安装了所有依赖关系。
去http://localhost:3000/
呈现Express Welcome to Express
- 所以它的工作原理。
我尝试使用节点并表示为简单的服务器现在只使用一些html
文件。
根据这本书 “跳跃开始Node.js的” 唐阮©2012 SitePoint Pty有限公司[页9-11],我编辑
app.js
文件,并添加
var fs = require('fs');
后
var routes = require('./routes/index');
var users = require('./routes/users');
我加
app.get('/form', function(req, res) {
fs.readFile('./form.html', function(error, content) {
if (error) {
res.writeHead(500);
res.end();
} else {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(content, 'utf-8');
}
});
});
然后,我创建了一个简单form.html
文件,把它放在nodetest1目录下,重新启动我的服务器,并在命令行中,我得到
app.get('/form', function(req, res) {
TypeError : Cannot call method 'get' of undefined
npm ERR! weird error 8
npm ERR! not ok code 0
我在做什么错?我只想使用简单的html,而不是Jade。
我也必须编辑我添加的每个html文件的app.js
?我将在哪里添加新文件,在哪个文件夹中?
在此先感谢
您是否创建了快速应用程序?
var express = require('express');
var app = express();
此外,您可以使用res.sendFile
为此。
app.get('/form', function(req, res) {
return res.sendFile('form.html');
});
如果您服务了很多你可能想看看express.static
中间件静态文件。 http://expressjs.com/4x/api.html#app.use
这将成为了你把你的公共目录中的所有文件:你form.html将送达至localhost:3000/form.html
|-app.js
|-public
| |-index.html
| |-form.html
:
app.use(express.static(__dirname + '/public'));
目录结构
如果你不想在没有扩展名的情况下提供html文件可以通过@robertklep使用其他答案中找到的解决方案来解决不同的问题。 Any way to serve static html files from express without the extension?
app.use(function(req, res, next) {
if (req.path.indexOf('.') === -1) {
var file = publicdir + req.path + '.html';
fs.exists(file, function(exists) {
if (exists)
req.url += '.html';
next();
});
} else {
next();
}
});
你会想这是以前app.use(express.static(__dirname + 'public'));
注意:你所提到的这本书出版12月2日,2012年3特快根据github上公布的2013年10月23日。目前的版本是4.8.5。您可能想要使用更新的参考。
'var express = require('express'); var app = express(); app.use(express.static(path.join(__ dirname,'public')));'在'app.js'中。我把'form.html'放在'public' dir和'http:// localhost:3000/form.html'中。谢谢! - 正常情况下,我把'http:// localhost:3000/form(最后没有'.html'),并且不能正常工作并呈现'Error 404'? - 这是一个完整的服务器?因为我提到的书建议编辑'app.js'和这个[tutorial](http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/),在第2部分中建议编辑路由和视图。他们为什么不能使用'public' dir? – slevin 2014-08-27 18:48:20
我在答案中添加了一些中间件,您可以使用它来实现此目的。它来自另一个答案在这里:http://stackoverflow.com/questions/16895047/any-way-to-serve-static-html-files-from-express-without-the-extension – Jordonias 2014-08-27 18:55:10