Я новичок в работе с узлами и работаю над учебником для записи данных в MySQL из NodeJS и не могу понять, почему данные не записываются в таблицу / DB базы данных MySQL.Заранее благодарю за любую помощь.
Среда: Express 4.16.0, версия Knex CLI: 0.15.2, версия Local Knex: 0.15.2, NPM 6.4.1, MySQL Ver 14.14 Distrib 5.7.9 (я смотрю на вещи через SequelPro, для osx10.11, Mac OS X
Вот код:
/ главная папка проекта store.js
module.exports = {
createUser ({ username, password }) {
console.log(`Add user ${username} with password ${password}`)
return Promise.resolve()
}
}
package.json
{
"name": "tutorial-node-database",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.3",
"knex": "^0.15.2",
"mysql": "^2.16.0"
}
}
knexfile.js
const knex = require('knex')(require('./knexfile'))
module.exports = {
createUser ({ username, password }) {
console.log(`Add user ${username} with password ${password}`)
return knex('user').insert({
username,
password
})
}
}
index.js
const express = require('express')
const bodyParser = require('body-parser')
const store = require('./store')
const app = express()
app.use(express.static('public'))
app.use(bodyParser.json())
app.post('/createUser', (req, res) => {
store
.createUser({
username: req.body.username,
password: req.body.password
})
.then(() => res.sendStatus(200))
})
app.listen(7555, () => {
console.log('Server running on http://localhost:7555')
})
/ public index.html
<!DOCTYPE html>
<html>
<head>
<title>Node database tutorial</title>
</head>
<body>
<form class="CreateUser">
<h1>Create a new user</h1>
<input type="text" class="username" placeholder="username">
<input type="password" class="password" placeholder="password">
<input type="submit" value="Create user">
</form>
<script src="/app.js"></script>
</body>
</html>
app.js
const CreateUser = document.querySelector('.CreateUser')
CreateUser.addEventListener('submit', (e) => {
e.preventDefault()
const username = CreateUser.querySelector('.username').value
const password = CreateUser.querySelector('.password').value
post('/createUser', { username, password })
})
function post (path, data) {
return window.fetch(path, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
}
/ migrations 20180914204559_create_user_table.js
exports.up = function (knex) {
return knex.schema.createTable('user', function (t) {
t.increments('id').primary()
t.string('username').notNullable()
t.string('password').notNullable()
t.timestamps(false, true)
})
}
exports.down = function (knex) {
return knex.schema.dropTableIfExists('user')
}
Обновление: я пытался добавить .debug () в цепочку запросов в app.js после:}). Debug () и вот что это дало:
Uncaught TypeError: Cannot read property 'debug' of undefined at app.js:7
[DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (<a href="https://www.chromium.org/developers/design-documents/create-amazing-password-forms">More info</a> ) <input type="password" class="password" placeholder="password">
POST http://localhost:7555/createUser 500 (Internal Server Error) 3app.js:9
Это было в Chrome, в Firefox я получил что-то другое:
TypeError: CreateUser.addEventListener(...) is undefined[Learn More] app.js:2:1
<anonymous>
http://localhost:7555/app.js:2:1
Я также попытался добавить:
.debug(username), and
.debug(createUser)
Вот что я получил:
Request URL:
Request method:
Remote address:
Status code:
500