如何使用Express和Node.js从表单发送参数

时间:2019-04-05 16:29:43

标签: javascript html node.js express server

对不起,英语,我是巴西人,我不知道怎么写。

我正在尝试使用Express通过邮寄发送表单数据:

index.html

<form action="insert" method="post">
            <p><h4> Title </h4>   <input type="text" name="title" id="title" size="40" maxlength="30" placeholder="Name of task"/> </p> 

            <p><h4>Description</h4> <textarea name="description" id="description" cols="50" rows="3" placeholder="description of task"></textarea> </p> 

            <p> 
                <h4>Grade</h4>
                <input type="radio" name="urgency" value="2"> 2
                <input type="radio" name="urgency" value="1" checked> 1
                <input type="radio" name="urgency" value="0"> 0
            </p>

            <p> 
                <h4>How?</h4>
                <select name="taskType" id="select"> 
                    <option value="2"> N* </option> 
                    <option value="1"> Hour </option> 
                    <option value="0"> Minute </option> 
                </select>
                <input type="text" name="repeats" id="options" size="40" maxlength="5" placeholder="NX?"/> </p> 
            </p>

            <p><button type="submit"> Submit </button></p>
        </form>

app.js

const express = require('express');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }))


const db = mysql.createConnection({
        host     : 'localhost',
        user     : 'root',
        password : '',
        database : 'metas'
});

db.connect( (err)  => {
        if(err) throw err;
        console.log('MySQL conected...');
});

app.get('/select', (req, res) => {
        let sql = "SELECT * FROM tasks";
        db.query(sql, (err, result) => {
                if(err) throw err;
                res.send(result);
        })
})

app.post('/insert', (req, res) => {
        let post = 
                {title: req.body.title, 
                description: req.body.description, 
                grau: req.body.urgency, 
                tipoRealizacao: req.body.taskType, 
                repeticoes: req.body.repeats
                }
        let sql = 'INSERT INTO tasks SET ?';
        let query = db.query(sql, post, (err, result) => {
                if(err) throw err;
                res.send("Post added");
        })
})


app.listen('3000', () => { console.log("Server initiated") } );

我正在使用mysql来存储任务,而且我正在端口3306上使用wampp,但是在提交表单时出现错误:

未找到

在此服务器上找不到请求的URL / MetaSite / public / insert。

位于本地主机端口80的Apache / 2.4.35(Win64)PHP / 7.2.10服务器

index.html位于公用文件夹中,而app.js位于src中。

有人可以帮我吗?我不知道我在做什么错。谢谢。

1 个答案:

答案 0 :(得分:1)

根据您的代码,您的index.html似乎不是由服务器javascript托管。为了使express能够处理来自该文件的邮寄请求,该文件需要由express引用和托管。如果这是您的操作,而您没有在代码中显示它,请告诉我,否则,这似乎是您的问题。您应该这样做:

var path = require('path');

app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname + 'public/index.html'));
});

将索引文件托管在http://localhost:3000/