Express JS中的基本表单页面

时间:2014-06-22 19:13:07

标签: javascript node.js express

我是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;

哪个也行不通。我确信我做错了但我不知道在哪里。

请帮忙,谢谢

3 个答案:

答案 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

Express Router documentation

答案 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();
      }
    });
});

在这种情况下不使用玉器渲染器。