在“获取 POST”之后重新“res.render”URL-ing DOM 数据数组到 Node-js

问题描述 投票:0回答:1

即使在阅读了许多相关问题之后,我也不确定在 JS 前端收集 DOM 数据并将其 POST 到快速服务器 POST URL 之后呈现 URL 的最佳方法是什么。

  • 我知道 fetch POST 不要求渲染的事实
  • 此时我不要求替代 POST 方法(XML / FORM 等)。如果当前的方法无效,我会问一个单独的问题
  • 我也很感谢关于如何立即“刷新”URL 的回复,然而,这主要是询问有关为下一个浏览器 GET 请求呈现 URL
  • 我“假设”了解我的应用程序仅在服务器启动时呈现一次 URL,这就是问题所在

如何在获取 POST 和 MYSQL 查询“ttupdate”完成后调用函数渲染?

// snippet render code ////////////////////////////////////////////////
function render(file, url, contentdata) {
    app.get(url, async(_req, res, next) => {
        try {
            res.render(file, { data: await contentdata });
        } catch (err) {
            next(err);
        }
    });
}


render('time-picker', '/time-picker', timetablesthree)

在以下代码片段中,您将在何处以及如何实施它?

// snippet new TIME-PICKER table to DB 
app.post("/time-picker-input", async(req, res) => {    
   
    for(i=0; i<=167; i++) {        
        let inputFieldId = req.body[i].fieldid;
        let inputFieldValue = req.body[i].fieldvalue;
        // console.log(inputFieldId);  

    await ttupdate(inputFieldValue, inputFieldId, 'timetablesthree');
    };
    res.json({ message: 'Success' });
 });

有关我的设置的其他信息:

let express = require('express')
let bodyParser = require('body-parser')
let app = express()
app.set('view engine', 'ejs')
let path = require('path')
app.set('views', path.join(__dirname, 'views'))
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}))
app.use((err, req, res, next) => {
    console.error(err.stack)
    res.status(500).send('Sorry - something broke...')
})
app.listen(3000, (req, res) => {
    console.log("App is running on port 3000")
})

let { singledbentry, refresh, refreshTwo, ttupdate } = require("./database.js")
let activetime = require('./activetime.js');

let mysql = require('mysql2')
javascript node.js express post fetch
1个回答
0
投票

这是一个可变范围的问题。

背景:许多端点正确呈现,并且在 FORM 操作 POST 后使用更新的数据正确呈现。

除非在服务器重新启动后,否则唯一无法正确呈现的端点是使用获取 POST。所以我误以为明显的原因是 fetch POST 的不同行为(比如不像浏览器那样请求渲染)。

然而,没有一个端点在重新加载后正确呈现。这是不可见的,因为他们总是通过快速 POST res.render 显示正确的数据。

编辑:

对于未来的读者:我把路由从函数中取出来,直接传递“timetablestree”的信息来证明这是一个变量范围的问题。

以下代码可以正常工作:

app.get('/time-picker', async(_req, res, next) => {
    try {
        timetablesthree = refresh('SELECT ttfield, ttfieldvalue FROM timetablesthree')
        res.render('time-picker', { data: await timetablesthree });
        console.log(timetablesthree);
    } catch (err) {
        next(err);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.