Ошибка «TypeError: Невозможно прочитать свойство« Имя »из неопределенного» при отправке формы в node.js » - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу сохранить данные формы html в файле JSON, но получаю сообщение об ошибке.

"Ошибка типа: невозможно прочитать свойство 'Имя' из неопределенного"

А также скажите, как создать файл JSON из строки JSON. А как добавить данные от нескольких пользователей.

Мой HTML-файл:

<!DOCTYPE html>
<html>
<head>
    <title>Sign up</title>
    <style type="text/css">
    div {
        background-color: rgb(66, 244, 229);
        padding: 15px;
        margin: auto;
        width: 300px;
        border-radius: 7px;
    }
    input {
        width: 100%;
        padding: 10px;
        box-sizing: border-box;
    }
    input[type=submit] {
        border-radius: 5px;
        border: none;
        margin: auto;
        background-color: orange;
        color: white;
    }
    </style>
</head>
<body>
    <div>
        <form action="/form" method="Post">
        <input type="text" name="Name" placeholder="Enter your Name"><br> 
 <br>
        <input type="email" name="Email" placeholder="Enter Email id"><br> 
 <br>
        <input type="password" name="Password" placeholder="Set Password"> 
   <br><br>
        <input type="number" name="Mobile" placeholder="Enter mobile 
  number"><br><br>
        <input type="submit" value="submit">
    </form>
</div>
</body>
</html>

И мой файл Server.js:

var express= require('express');

var app= express();

app.use("/public", express.static(__dirname + "/public"))

app.all('/', function(req, res) {
res.sendFile('/express.js/public/signup.html');
});

app.post("/form", function(req, res){
    var username= req.body.Name;
    var email= req.body.Email;
    var mobile= req.body.Mobile;
    var password= req.body.Password;

    var object= { name_new:username, mail: email, pass_word:password, 
     Mobile_No: mobile}
    var json= JSON.stringify(obj);
   });

app.listen(1111);

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Пожалуйста, ознакомьтесь с руководством по экспрессу. Вам нужно промежуточное программное обеспечение для разбора тела

req.body Содержит пары ключ-значение данных, представленных в теле запроса. По умолчанию он не определен и заполняется при использовании промежуточного программного обеспечения для разбора тела, такого как body-parser и multer.

http://expressjs.com/en/4x/api.html#req.body

0 голосов
/ 05 сентября 2018

вы должны проанализировать ваш запрос с пакетами body-parser

npm install body-parser --save

включает body-parser на маршрутах

var bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))

Теперь вы сможете получать все почтовые данные внутри маршрутов.

0 голосов
/ 05 сентября 2018

Вам нужно использовать анализатор тела, чтобы иметь возможность использовать req.body в почтовом маршруте:

var express= require('express');
var bodyParser = require('body-parser')

var app= express();

// parse forms with MIME type application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))


app.use("/public", express.static(__dirname + "/public"))

app.all('/', function(req, res) {
res.sendFile('/express.js/public/signup.html');
});

app.post("/form", function(req, res){
    var username= req.body.Name;
    var email= req.body.Email;
    var mobile= req.body.Mobile;
    var password= req.body.Password;

    var object= { name_new:username, mail: email, pass_word:password, 
     Mobile_No: mobile}
    var json= JSON.stringify(obj);
   });

app.listen(1111);

Из документации body-parser :

bodyParser.urlencoded ([параметры])

Возвращает промежуточное ПО, которое анализирует только тела с урлен-кодом и просматривает только те запросы, в которых заголовок Content-Type соответствует параметру type. Этот синтаксический анализатор принимает только кодировку тела UTF-8 и поддерживает автоматическое наложение кодировок gzip и deflate.

Новый объект тела, содержащий проанализированные данные, заполняется в объекте запроса после промежуточного программного обеспечения (т.е. req.body). Этот объект будет содержать пары ключ-значение, где значением может быть строка или массив (при расширении false) или любой тип (при расширении true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...