我是Node Js和Express Js的新手,我正在关注(书)[http://www.sitepoint.com/store/jump-start-node-js/]来学习Node Js。
在书中,作者为简单的登录表单创建了一个简单的页面。我正在关注那个但是找不到404。
Not Found
404
Error: Not Found
at Layer.app.use.res.render.message [as handle] (/Applications/MAMP/htdocs/resto/app.js:29:15)
at trim_prefix (/Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:240:15)
at /Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:208:9
at Function.proto.process_params (/Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:269:12)
at next (/Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:199:19)
at next (/Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:176:38)
at /Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:137:5
at /Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:250:10
at next (/Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:160:14)
at next (/Applications/MAMP/htdocs/resto/node_modules/express/lib/router/index.js:176:38)
我在 App.js
中添加了以下代码var fs = require('fs');
app.get('/form', function(req, res){
fs.readFile('.views/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 ,我在其中创建了一个简单的html表单。
这对我没用,所以按照默认 index.jade 的流程,我创建了一个文件 form.js 并在其中添加了以下代码
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/form', function(req, res) {
res.render('form');
});
module.exports = router;
哪个也行不通。我确信我做错了但我不知道在哪里。
请帮忙,谢谢
答案 0 :(得分:0)
我也是NodeJS和Express的新手,但我认为问题是你从未声明在哪里找到form.html文件。在app.get之前(' / form',....),放app.use(express.static(__ dirname +'把你的form.html放在或不放的目录)任何东西,如果它不在目录');这种方式表达知道在哪里找到form.html,你不应该再获得404
答案 1 :(得分:0)
假设你有这些文件:
- app.js
- routes(包含root.js的文件夹)
- views(包含form.jade的文件夹)
然后,在你的app.js中:
var path = require('path');
var express = require('express');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use('/', require('./routes/root')); // Say that all the routes defined in root.js will start with http://yourdomain.com/
在root.js中:
var express = require('express');
var router = express.Router();
/* GET http://yourdomain.com/form */
router.get('/form', function(req, res) {
res.render('form'); // Render form.jade view
});
当然,这真的很简约,你还有更多的事情要做......但我希望这能帮助你更好地理解node.js使用Express
答案 2 :(得分:0)
Express在响应对象中提供sendFile
函数,允许您执行此操作:
app.get('/form', function(req, res){
res.sendFile('./views/form.html', {root: __dirname}, function(error, content){
if(error){
res.writeHead(500);
res.end();
}
});
});
在这种情况下不使用玉器渲染器。