Базовая страница формы в Express JS

#javascript #node.js #express

#javascript #node.js #экспресс

Вопрос:

я действительно новичок в 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 в папке Views, в которой я создал простую HTML-форму.

У меня это не сработало, поэтому, следуя потоку default 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;
 

Что также не сработало. Я уверен, что делаю что-то не так, но я не знаю, где.

Пожалуйста, помогите, спасибо

Ответ №1:

Предполагая, что у вас есть эти файлы :


— app.js

— маршруты (папка, содержащая root.js )

— представления (папка, содержащая 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 использование экспресс-

Документация по экспресс-маршрутизатору

Комментарии:

1. Можете ли вы сказать мне, как я могу использовать простой HTML вместо jade?

2. Может быть, тогда вам стоит взглянуть на движок шаблонов EJS . Это действительно похоже на простой HTML с некоторыми динамическими элементами

Ответ №2:

Я новичок в NodeJS и Express тоже, но я думаю, что проблема в том, что вы никогда не указываете, где найти form.html досье. Прямо перед app.get(‘/form’, ….) поместите app.use(express.static(__dirname ‘поместите каталог вашего form.html находится в или не помещать ничего, если этого нет в каталоге ‘)); таким образом, express знает, куда найдите form.html и ты больше не должен получать 404

Комментарии:

1. Теперь он дает мне узел www GET / form 500 7 мс

2. Чтобы подтвердить, что у вас есть app.use(express.static(__dirname «/Views»)); и это чисто для тестирования, но удаляет содержимое метода get, поэтому удалите ReadFile в get и просто введите res.writeHead(200, {‘Content-Type’: ‘text/html’}); res.end(содержимое, ‘utf-8’);

Ответ №3:

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

Средство визуализации jade в этом случае не используется.