Недавно я проследил простой учебник по созданию сервера Express (https://codeforgeek.com/2014/06/express-nodejs-tutorial/).Экспресс-сервер - не удается POST/
Я пытаюсь расширить код из этого учебника, чтобы я мог отвечать на пост-запросы. Я хочу сделать это путем обновления файла JSON (что случается быть заполнены «комментариями пользователей», а затем перерисовка на «/»
./server.js:
var express = require('express');
var app = express();
// routing configuration
require('./router/main')(app);
// ejs configuration
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);
// run the server
var server = app.listen(8080, function(){
console.log('Express server listening on port 8080');
});
. /router/main.js (маршрутизаторы):
var fs = require('fs');
var ejs = require('ejs')
module.exports = function(app){
app.get('/', function(req, res){
var comments = JSON.parse(fs.readFileSync(__dirname + '/../comments.json'));
res.render('index.ejs', comments);
});
app.post('/', function(req, res){
console.log('here in post');
var name = req.body.name;
var message = req.body.message;
var newComment = {"name": name, "message": message};
var comments = JSON.parse(fs.readFileSync(__dirname + '/../comments.json'));
comments.push(newComment);
fs.writeFileSync(__dirname + '/../comments.json', comments, 'utf8');
//redirect to a 'get' on '/'
res.redirect('/');
});
app.get('/about', function(req, res){
res.render('about.html')
});
}
./views/index.ejs:
<div>
<div>
<h1> Joe's Forum </h1>
<a href='/about'> (about) </a>
</div>
<div>
<ul>
<% comments.forEach(function(comment){ %>
<li>
<%= comment.name %> : <%= comment.message %>
</li>
<% }); %>
</ul>
</div>
<h2> Enter a new comment </h2>
<form action='/' method="post">
Enter your name: <input type='text' name='name'> <br><br>
Enter your message: <input type='textarea' name='message'> <br><br>
<input type='submit' value='Submit'>
<form>
</div>
./comments.json:
{
"comments": [
{"name":"Joe", "message" : "What advantages does Node.js afford the web developer?"},
{"name": "John", "message": "Asynchronous IO helps us to keep our pages responsive even if the server is fetching data"}
]
}
Когда я пытаюсь представить новый комментарий от моей формы, я вижу это:
"Может не POST /"
Может кто-нибудь объяснить, почему я могу получить эту ошибку? Спасибо
Вы делаете что-то реальное нет-нет. Вы никогда не должны использовать 'Sync' api nodeJS и, конечно, не отвечать на экспресс-сервер. Там также нет ошибок в любом месте, поэтому ваш сервер будет очень подвержен сбою. Можете ли вы показать содержимое 'comments.json'? – caasjj
Хорошо справедливо. Тем не менее, я просто хотел «заставить его работать» как упражнение в склонности Express. Я знаю, что это не отличный код. Как только я получу «почтовый запрос», я намерен его очистить (т. Е. Подписаться на лучшие практики). В соответствии с просьбой я отредактирую, чтобы включить comments.json. –
Ни в коем случае не означало критики - просто указывая на то, что вы могли бы или не могли бы знать. Теперь, я думаю, я также понимаю, почему ваш код плохо себя ведет. Вы делаете 'comments.push' в' Object', а не в 'Array'. Позвольте мне посмотреть, могу ли я разрешить вам четкий ответ. – caasjj