Javascript localhost使用node.js写入文件后无法访问此站点

Javascript localhost使用node.js写入文件后无法访问此站点,javascript,node.js,express,Javascript,Node.js,Express,我正在尝试使用节点写入文件,实际上我有一个带有一些复选框的表单,当表单提交时,服务器将根据是否选中输入a、b或c写入文件 该文件是一些json: { 答:0,, b:0, c:0 } 因此,如果选中输入“a”,我想在json文件中的键a中添加1 实际发生的情况是,当我提交表单时,页面崩溃并说“无法访问此网站”,但文件已正确更新(当我刷新网页时,它也正确加载) 代码如下: const express = require('express'), app = express(), bo

我正在尝试使用节点写入文件,实际上我有一个带有一些复选框的表单,当表单提交时,服务器将根据是否选中输入a、b或c写入文件

该文件是一些json: { 答:0,, b:0, c:0 } 因此,如果选中输入“a”,我想在json文件中的键a中添加1

实际发生的情况是,当我提交表单时,页面崩溃并说“无法访问此网站”,但文件已正确更新(当我刷新网页时,它也正确加载)

代码如下:

const express = require('express'),
    app = express(),
    bodyParser = require('body-parser'),
    fs = require('fs');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}))
app.post('/vote/new', handleVote);

function handleVote(req,res){
    if(req.body.a === 'on'){
        choosePollOption(req,res,'a');
    }else if(req.body.b === 'on'){
        choosePollOption(req,res,'b');
    }else if(req.body.c === 'on'){
        choosePollOption(req,res,'c');
    }
}

function choosePollOption(req,res,topic){
    let poll = {};
    fs.readFile(__dirname + '/poll.json', 'utf8', function (err, data) {
        poll = JSON.parse(data);
        poll[topic] += 1;
        console.log(poll)
        fs.writeFile(__dirname + '/poll.json',JSON.stringify(poll), function (err,data) {
            console.log(err);
            console.log(data);
            // res.redirect('/'); if I uncomment this line the page does not initially crash but if you submit the form again after refreshing the webpage it crashes the second or third time.
        })
    })

    console.log(poll);
}
编辑: 以下是前端代码:

<form action="/vote/new" method="POST">
    <label for="a">a</label><input id="a" name="a" type="checkbox"  class="checkbox" onclick="vote(this)"/>
    <label for="b">Mac OS</label><input id="b" name="b" type="checkbox" class="checkbox" onclick="vote(this)"/>
    <label for="c">c</label><input id="c" name="c" type="checkbox"  class="checkbox" onclick="vote(this)"/>
    <input type="submit" />
</form>

let vote = (element) => {
    let checkboxes = document.getElementsByClassName('checkbox'); // array of all check boxes
    for(let i = 0; i <= checkboxes.length -1; i++){
        if(checkboxes[i].id !== element.id){
            checkboxes[i].checked = false;
        }
    }

}

看起来您在处理表单后忘记将某些内容发送回客户。因此,只需将您的
//res.redirect(…)
替换为
res.status(200)。end('Ok')

是否缺少一些代码?您的
poll.json是否有问题?这对我来说似乎很管用。查看您的
节点的控制台日志
命令,它可能有一个错误,会给您一个提示。我已经发布了一个关于错误的pole.json文件@Litty的编辑,我注意到的一件事是,当我最初提交表单时,终端控制台显示:{}{linux:2,macos:0,windows:0}但是当我再次提交表单时,终端控制台显示:null undefined知道为什么会这样吗?这是可行的,我仍然不明白为什么即使res.redirect没有被注释掉也会出现问题。你能告诉我吗?
{"a":2,"b":0,"c":0}