Есть ли способ получить доступ к серверу DOM? - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь вырваться из ада обучающих программ и создать что-то, чтобы облегчить себе жизнь (ирония), это калькулятор часов.

Я не буду go слишком много заниматься функциональностью, но в основном это просто приложение, в котором хранятся все мои месячные часы, которые я могу рассчитать в конце месяца, нажав кнопку.

Однако я застрял, я новичок в этом (особенно бэкэнд), и я могу Я не нашел способа получить доступ к DOM и, насколько я понимаю, это нормально, учитывая его серверный код.

Однако мне просто нужно знать, как вы захватываете элементы DOM и назначаете их переменным, если эта функциональность не существует на сервере ? Есть ли альтернатива ...

document.querySelector('...')

?

Я установил JSDOM, однако, насколько я понимаю, вы можете передавать только фрагменты кода, а не доступ ко всей странице? Я могу ошибаться ...

Может кто-нибудь, пожалуйста, помогите мне получить более четкое представление о том, что мне нужно понимать / делать?

Вот мое приложение. js код, go легко :)

const express = require('express'),
    app = express(),
    bodyParser = require('body-parser'),
    mongoose = require('mongoose'),
    jsdom = require("jsdom"),
    { JSDOM } = jsdom,
    dom = new JSDOM('localhost:3000/');

// ----------------------------------------//
const date = new Date(),
    day = date.getDate(),
    month = date.toLocaleString('default', { month: 'long' }),
    table = dom.window.document.querySelector('table'),
    totalShiftHours = dom.window.document.querySelectorAll('.totalShiftHours');



app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public'));
app.set('view engine', 'ejs');
app.listen(3000, () => console.log("I'm listening"));
mongoose.connect('mongodb://localhost:27017/hours_calculator', { useNewUrlParser: true, useUnifiedTopology: true });

const shiftSchema = new mongoose.Schema({
    date: Number,
    startTime: Number,
    finishTime: Number,
    lunchTime: Number,
});
const Shift = mongoose.model('Shift', shiftSchema);

app.get('/', (req, res) => {
    Shift.find({}, (err, allShifts) => {
        if (err) console.log(`There's an error: ${err}`)
        else res.render('index', {
            shifts: allShifts,
            day: day,
            month: month,
            table: table,
            totalShiftHours: totalShiftHours
        })
    })
});

app.post('/', (req, res) => {
    const startTime = Number(req.body.startTime),
        finishTime = Number(req.body.endTime),
        lunchTime = Number(req.body.lunchTime),
        newShift = {
            date: day,
            startTime: startTime,
            finishTime: finishTime,
            lunchTime: lunchTime
        };
    Shift.create(newShift, (err, newShift) => {
        if (err) console.log(`Somethings wrong, ${err}`);
        else res.redirect('/')
    })
});

1 Ответ

2 голосов
/ 14 июля 2020

На стороне сервера нет DOM (кроме некоторой виртуализации DOM). В вашем случае, если вы хотите написать такое приложение, лучше всего будет создать отдельно внешний и внутренний код. Часть внешнего интерфейса может обслуживаться вашим сервером (даже если это можно сделать с помощью метода app.static из express), и он будет включать html, css, javascript код, в котором вы сможете управлять значениями формы. и после этого вы сможете делать запросы к серверу с помощью API ajax / fetch или просто classi c form POST-запроса. Позже сервер продолжит работу с этими значениями и сохранит данные в базе данных (как вы делаете это с mon goose). Надеюсь, что я описал это достаточно ясно и вам это поможет.

...