#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 в этом случае не используется.