• 1
  • 2
2024-01-13, 20:08
  #1
Medlem
toalettrullen14s avatar
Hej!

Har en frga jag grubblar p och har svrt att f vettigt svar p n s lnge.

Jag har en mapp med css, js och HTML. Jag har sedan en MySql databas dit jag vill fra in data. Jag vill gra det genom att plocka datan frn ngra <input> genom webblsaren.

Jag har Node.js installerat och allt funkar bra. Jag kan fra in datan genom terminalen fr filen jag kallar "database.js", "node database.js" -> infon i koden kommer in som tnkt i databasen.

Men som jag frstr det mste jag ha 2x JS-filer, en fr fronten och en fr serverkommunikationen. Fr nr jag lgger in Node-koden (som funkar bra i sig sjlvt) i den andra JS-filen s str det bara "require is not defined", (anvnder "const mysql = require('mysql')).

Hur lser jag detta? Mste jag ha 2x JS-filer? En som tar upp informationen frn HTML-dokumentet, skickar, en som tar emot denna data och sedan fr den vidare till MySQL?

Tacksam fr svar!
Citera
2024-01-13, 21:27
  #2
Bannlyst
Citat:
Ursprungligen postat av toalettrullen14
Hej!

Har en frga jag grubblar p och har svrt att f vettigt svar p n s lnge.
Jag har inte jobbat med node.js p nstan 10 r nu och gjorde det bara en kort period. D verkade det hr ganska bra: https://sailsjs.com/. Du kanske ska kika p det lite? Lita inte p mig nr det gller node.js i ngon ustrckning alls, men om ingen annan svarar r kanske det hr svaret bttre n inget? 🥶

Citera
2024-01-13, 23:56
  #3
Moderator
Chantres avatar
Ntverk och datorkommunikation --> Webbutveckling och javascript
/Moderator
Citera
2024-01-14, 01:57
  #4
Medlem
NodeJS r server side javascript. "Vanligt" javascript krs i webblsaren. Webblsare kan inte exekvera NodeJS-kod. Det r drfr den klagar p require, webblsaren har ingen aning om vad require betyder.

S ja, du mste ha tv olika filer, en som krs som server och en som skickas till webblsaren och exekveras dr.

Du skickar lmpligtvis data mellan dom tv filerna via HTTP.
Citera
2024-01-14, 03:26
  #5
Medlem
Anvnd express i nodejs fr att fixa API:t

T.ex.

https://medium.com/@bipingiri27/crud...l-7ce1d4acb418

Testa:

To create a simple example of HTML communicating with a Node.js Express server to interact with a MySQL database, you need three parts:

1. **HTML Frontend**: This is the user interface where users input data or request data.
2. **Node.js Express Backend**: This acts as the middleman, receiving requests from the HTML frontend, interacting with the MySQL database, and returning responses.
3. **MySQL Database**: This is where your data is stored.

Here's a basic example:

### 1. HTML Frontend (`index.html`)

```html
<!DOCTYPE html>
<html>
<head>
<title>MySQL Data</title>
</head>
<body>
<h1>Data Entry for MySQL</h1>
<form action="/submit-data" method="post">
<input type="text" name="data" placeholder="Enter some data">
<button type="submit">Submit</button>
</form>
</body>
</html>
```

### 2. Node.js Express Backend (`app.js`)

First, install Express and MySQL Node.js modules using npm:

```bash
npm install express mysql
```

Then, create your Express server:

```javascript
const express = require('express');
const mysql = require('mysql');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.urlencoded({ extended: true }));

// MySQL connection
const connection = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database'
});

connection.connect();

app.post('/submit-data', (req, res) => {
const data = req.body.data;
connection.query('INSERT INTO your_table SET ?', {data: data}, (error, results, fields) => {
if (error) throw error;
res.send('Data submitted to MySQL: ' + data);
});
});

app.listen(3000, () => {
console.log('Server is running on port 3000');
});
```

### 3. MySQL Database

You need to have MySQL installed and a database with a table to store the data. For example:

```sql
CREATE DATABASE your_database;
USE your_database;

CREATE TABLE your_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(255) NOT NULL
);
```

### Running the Example

1. Start your MySQL server and ensure the database and table are set up.
2. Run the Node.js application (`node app.js`).
3. Open `index.html` in a web browser and submit data through the form.

When you submit data via the HTML form, it sends a POST request to the Express server, which then inserts the data into the MySQL database. This is a simplified example and doesn't include error handling or security measures like input validation and sanitization, which are crucial for production applications.

Bara ett snabbt frslag frn chatGPT, men a, ls p om express.
__________________
Senast redigerad av Vargtickare 2024-01-14 kl. 03:34.
Citera
2024-01-14, 03:50
  #6
Medlem
https://developer.mozilla.org/en-US/...s_Nodejs/forms

Express Tutorial Part 6: Working with forms

Previous
Overview: Express Nodejs
Next
In this tutorial we'll show you how to work with HTML Forms in Express using Pug. In particular, we'll discuss how to write forms to create, update, and delete documents from the site's database.
Citera
2024-01-14, 08:38
  #7
Moderator
vhes avatar
Nu har trden flyttats till Systemutveckling. Ls https://www.flashback.org/announcement.php?f=42 och anvnd kodtaggar.

/Moderator
Citera
2024-01-14, 13:42
  #8
Medlem
toalettrullen14s avatar
Rikligt tack till er alla som har svarat! Varit vldigt anvndbart, pekades i rtt riktning lite mer nu. Fastnade dock lite igen nu nr jag skulle gra en XHR-req och kommer drfr en follow-up-frga om ngon knner sig manad

Vid Fetch fr man alltid tillbaka ett Object man kan navigera fr att vlja ut en viss del av responsen man fr, men vid XHR-req verkar hela skiten komma med. Hur kan man lsa det p ett bra stt?

I fallet hr:
https://api.nbp.pl/api/cenyzlota

Fr jag med fetch ett Object som sagt, medan med XHR fr jag bara en string: "[{"data":"2024-01-12","cena":258.87}]"

Finns det ngra smidiga vis att f fram bara t.ex. "258.87" ur den datan? Fr inga vidare svar frn AI kring det..

terigen, tack fr era svar hittills!
________________________________

Edit//
Tog mig ett par minuter efter denna texten innan jag kom ihg att man ju utan problem ska kunna konvertera mellan alla varianter, i detta fallet med JSON.parse(data)!

Problem solved..
__________________
Senast redigerad av toalettrullen14 2024-01-14 kl. 13:49.
Citera
2024-01-14, 16:13
  #9
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av toalettrullen14
Rikligt tack till er alla som har svarat! Varit vldigt anvndbart, pekades i rtt riktning lite mer nu. Fastnade dock lite igen nu nr jag skulle gra en XHR-req och kommer drfr en follow-up-frga om ngon knner sig manad

Vid Fetch fr man alltid tillbaka ett Object man kan navigera fr att vlja ut en viss del av responsen man fr, men vid XHR-req verkar hela skiten komma med. Hur kan man lsa det p ett bra stt?

I fallet hr:
https://api.nbp.pl/api/cenyzlota

Fr jag med fetch ett Object som sagt, medan med XHR fr jag bara en string: "[{"data":"2024-01-12","cena":258.87}]"

Finns det ngra smidiga vis att f fram bara t.ex. "258.87" ur den datan? Fr inga vidare svar frn AI kring det..

terigen, tack fr era svar hittills!
________________________________

Edit//
Tog mig ett par minuter efter denna texten innan jag kom ihg att man ju utan problem ska kunna konvertera mellan alla varianter, i detta fallet med JSON.parse(data)!

Problem solved..
Enklast mjliga (fr andra som lser, ven om du lst detta sjlv), om man stoppar in resultatet frn XHR i xhrJSON:
Kod:
const cena = JSON.parse(xhrJSON)[0].cena;

Not: man behver lgga till [0] eftersom JSON-strngen har strukturen att objektet ligger in en omslutande array.
__________________
Senast redigerad av Enterprise 2024-01-14 kl. 16:16.
Citera
2024-01-14, 17:34
  #10
Medlem
toalettrullen14s avatar
Citat:
Ursprungligen postat av Enterprise
******************

Nr du nd ploppade in hr mste jag frga dig en sak!

Frsker gra det s nerdummat som det bara gr fr att jag ska fatta exakt hur man gr frn grunden, men blir fel nd.

Nr jag exekverar koden frn index.js, s kommer all kod frn database.js in i konsollen (istllet fr responsen som koden skulle generera). Hur kommer det sig? Tanken r ju senare att jag ska stta ihop den med Mysql-databasen och f in allt till webblsaren, inte f Node.js-koden i textformat

Har du ngon tanke? Koden hr nedan!


index.js:
_________________________________
const xhr = new XMLHttpRequest()
xhr.open('GET', '\database.js')

xhr.addEventListener('load', () => {
if(xhr.status === 200){
console.log(xhr)
}
else{
console.log('Connection failed.')
}
})
xhr.send()
_________________________________
database.js:
________________________________________
const http = require('http');

const server = http.createServer((req, res) => {
console.log(req)
res = 'majs'
})
server.listen(3000, () => {
console.log('Server is listening on port 3000.')
})
________________________________________
Citera
2024-01-14, 20:14
  #11
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av toalettrullen14
Nr du nd ploppade in hr mste jag frga dig en sak!

Frsker gra det s nerdummat som det bara gr fr att jag ska fatta exakt hur man gr frn grunden, men blir fel nd.

Nr jag exekverar koden frn index.js, s kommer all kod frn database.js in i konsollen (istllet fr responsen som koden skulle generera). Hur kommer det sig? Tanken r ju senare att jag ska stta ihop den med Mysql-databasen och f in allt till webblsaren, inte f Node.js-koden i textformat

Har du ngon tanke? Koden hr nedan!


index.js:
_________________________________
const xhr = new XMLHttpRequest()
xhr.open('GET', '\database.js')

xhr.addEventListener('load', () => {
if(xhr.status === 200){
console.log(xhr)
}
else{
console.log('Connection failed.')
}
})
xhr.send()
_________________________________
database.js:
________________________________________
const http = require('http');

const server = http.createServer((req, res) => {
console.log(req)
res = 'majs'
})
server.listen(3000, () => {
console.log('Server is listening on port 3000.')
})
________________________________________
Var och hur ligger database.js sparat?
Det ser ut som att det just nu ligger p en filserver. Och du fr allts filen hmtad (och inte exekverad p serversidan). Det verkar allts som att din klientkod gr precis vad den ska, men problemet ligger p din serverinstllning.

Kr du med Node.js eller Apache?
Om du kr Node.js, har du satt upp en web-server t.ex. Express?
I s fall brukar man ha routing-regler fr att kra en viss kod. Inte lgga en fil som heter database.js som anropas drigenom.

Edit: Jag tittade nu p din database.js fil och vad du vill gra (antar jag) r att kra denna p servern med node.
Allts typ:
Kod:
node ./database.js
D ska server-konsollen visa: "Server is listening on port 3000" och du kan d gra ett anrop till servern. Dock ser database.js inte frdig ut.

Hr r kod som i varje fall teoretisk fungerar (dock utan databas-funktionalitet):

Kod:
const http = require('http');

const server = http.createServer((req, res) => {
    console.log(req.url);
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('majs');
});

server.listen(3000, () => {
    console.log('Server is listening on port 3000.');
});
__________________
Senast redigerad av Enterprise 2024-01-14 kl. 20:23.
Citera
2024-01-15, 14:59
  #12
Medlem
toalettrullen14s avatar
Citat:
Ursprungligen postat av Enterprise
Var och hur ligger database.js sparat?
Det ser ut som att det just nu ligger p en filserver. Och du fr allts filen hmtad (och inte exekverad p serversidan). Det verkar allts som att din klientkod gr precis vad den ska, men problemet ligger p din serverinstllning.

Kr du med Node.js eller Apache?
Om du kr Node.js, har du satt upp en web-server t.ex. Express?
I s fall brukar man ha routing-regler fr att kra en viss kod. Inte lgga en fil som heter database.js som anropas drigenom.

Edit: Jag tittade nu p din database.js fil och vad du vill gra (antar jag) r att kra denna p servern med node.
Allts typ:
Kod:
node ./database.js
D ska server-konsollen visa: "Server is listening on port 3000" och du kan d gra ett anrop till servern. Dock ser database.js inte frdig ut.

Hr r kod som i varje fall teoretisk fungerar (dock utan databas-funktionalitet):

Kod:
const http = require('http');

const server = http.createServer((req, res) => {
    console.log(req.url);
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('majs');
});

server.listen(3000, () => {
    console.log('Server is listening on port 3000.');
});

Tack fr svaret!

Jag gr egentligen det hr mest fr att lra mig.

Har filerna liggandes offline, lokalt p datorn i samma mapp. Mysql r installerat p datorn och i den skapade jag en DB.

Du har nog rtt i din analys dr.

Database.js, nr jag "triggar den" i konsollen genom "node database.js" s funkar allt. Bde lgga in och ta ut info frn DB.

Vad mitt problem r, r ju att jag inte vet hur jag genom min vanliga index.js-fil kan trigga samma som "node database.js" I konsollen gr, och sedan suga t mig infon till index.js. Det knns som jag r nra svaret, men man vet inte vad man inte vet, och drfr svrt vad man ska googla efter 😅

Ska prova denna kod nr jag kommer hem igen!

Fr man frga, du la till detta:

" res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain' "

r det allt som saknades, och vad exakt r denna "Header"? Om du orkar frklara.

Sedan statuscode 200 trodde jag kom automatiskt nr anrop var OK, behver man manuellt lgga till det?

Tack fr hjlpen!
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in