Knex / Express не записывает данные в таблицу MySQL - PullRequest
0 голосов
/ 15 сентября 2018

Я новичок в работе с узлами и работаю над учебником для записи данных в 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
...