#javascript #jquery #express #post
Вопрос:
Здесь у меня есть 5 файлов, как вы видите. Это приложение для списка задач, которое показывает задачи (сохраненные в переменной данных, расположенной в todocontroller.js)в браузере и с помощью поля ввода приложение должно добавить новый ввод в качестве задачи (элемент в массиве с именем данные). Теперь проблема в том, что он не добавляет введенное значение в список после нажатия на кнопку отправить. Я не знаю, что не так, Может ли кто-нибудь помочь мне это исправить
todocontroller.js
var express = require('express')
var todoController =
require('./controllers/todoController')
var app = express()
app.set('view engine', 'ejs')
app.use(express.static('./public'))
app.use(express.urlencoded({extended: true}))
app.use(express.json())
todoController(app)
app.listen(3000)
console.log('Listening to port 3000...')
app.js
var data = [{item :'get milk'}, {item :'water'}, {item :'electricity'}]
module.exports = function(app){
app.get('/todo', function(req, res){
res.render('todo', {list : data})
})
app.post('/todo', function(req, res, next){
console.log(req.body)
data.push(req.body)
res.send(data)
next()
})
app.delete('/todo', function(res, req){
})
}
todo.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Todo list app</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" href="/assets/styles.css" type="text/css">
</head>
<body>
<h1>Todo list</h1>
<div id="todo-table">
<form>
<input type="text" name="item" placeholder="Add an item...">
<button type="submit">Add item</button>
</form>
<ul>
<% for(var i=0; i < list.length; i ) { %>
<li><%= list[i].item %></li>
<% } %>
</ul>
</div>
</body>
</html>
todo-list.js
$(document).ready(function(){
$('form').on('submit', function(){
var item = $('form input');
var todo = {item: item.val()};
$.ajax({
type: 'POST',
url: '/todo',
data: todo,
success: function(data){
//do something with the data via front-end framework
location.reload();
}
});
return false;
});
$('li').on('click', function(){
var item = $(this).text().replace(/ /g, "-");
$.ajax({
type: 'DELETE',
url: '/todo/' item,
success: function(data){
//do something with the data via front-end framework
location.reload();
}
});
});
});
пакет.json
{
"name": "node-js-playlist-master",
"version": "1.0.0",
"description": "CSS and asset files for the Net Ninja YouTube nodejs playlist",
"main": "app.js",
"scripts": {
"test": "echo "Error: no test specified" amp;amp; exit 1"
},
"author": "me",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"ejs": "^3.1.6",
"express": "^4.17.1"
}
}
Комментарии:
1. Пожалуйста, опишите, что означает «это не работает для меня». Есть ли какие-либо сообщения об ошибках? Делает ли это что-то неожиданное? Что происходит?
2. Что я подразумеваю под «Это не работает для меня», так это то, что когда я добавляю некоторые данные в область ввода, они не добавляются в список задач, изменений нет.