сохранение данных формы в виде txt файла или json на сервере - PullRequest
0 голосов
/ 20 марта 2019

Я хочу отправить данные формы в виде пары ключ-значение в формате json или текстового файла на сервере с помощью пользовательского интерфейса, введя соответствующие поля. Я попробовал несколько способов, но пока не повезло. Любые предложения, пожалуйста? Прикрепив мой код для справки.

function saveTalend() {
var location = document.getElementById('loc_st').value;
var sqlFileName = document.getElementById('txtfilePath').value;
var tableName = document.getElementById('dest_table').value;
var modeTal = document.getElementById('dest_mode').value;
var appName = e.name.value;

	var data = `input {
		application_name = "${appName}"
		location_talend = "${location}"
		hql_name = "${sqlFileName}"
		table_name = "${tableName}",
		mode = "${modeTal}"

	}`;
	e.nest_talend.value = tal_js.toString();
	e.action="/talend";
	return true;
}


app.post('/talend', function (req, res) {
    console.log("enetered talend")
    var app_name = '';

    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        res.writeHead(200, {
            'content-type': 'text/plain'
        });
        var oldpath = files.sqlfile.path;
        var base_path = 'C:\Projects';
        var newpath = '';
        app_name = fields.name.toString();
        if (/^win/i.test(process.platform)) {
            //windows is not perfectly yet but unix works without any issues
            //newpath = 'C://Users//atalap//' + files.sqlfile.name;
            newpath = process.env.USERPROFILE + '\\' + files.sqlfile.name;
            console.log("user Home path " + process.env.HOMEPATH + " HOME " + process.env.HOMEPATH + " USERPROFILE" + process.env.USERPROFILE);
        } else {
            newpath = base_path + app_name + '/hql/' + files.sqlfile.name;
        }
        var tal_js = fields.nest_talend.toString();
        console.log("hocon " + tal_js);
        // shell.mkdir('-p', base_path + appName + '/conf');
        shell.mkdir('-p', base_path + app_name + '/hql');
        // shell.rm('-rf', base_path + appName + '/hql/*');

        // var conf_file = base_path + appName + '/conf/' + appName + '.conf';

        fs.writeFileSync(tal_js, 'utf8', function (err) {
            if (err) {
                throw err;
            } else {
                console.log("form data written to " + tal_js);
            }
        });

        fs.rename(oldpath, newpath, function (err) {
            if (err) throw err;
        });

        console.log('last part of form.parse');
    });
    // res.redirect('./form.html');
    return;
});
<div class="form-group row">
            <label for="data" class="col-sm-2 col-form-label">Location</label>
            <div class="col-sm-2">
                <select class="form-control" id="loc_st" name="loc_st">
                    <option>Spark</option>
                    <option>Talend</option>
                </select>
            </div>
        </div>

<div class="container" id="myHeader">
                <div class="form-group col childContainer">

                    <label for="fileToLoad0" class="btn button1 btn-md btn-secondary">Import</label>
                  
                   <input type="file" id="fileToLoad0" name="sqlfile" style="display:none" onchange='openFile(event)'>
                    <input type="text" class="form-control" readonly="true" id="txtfilePath" style="width: 30%; margin-top: 15px; margin-left: 15px;" />


                    <div class="form-group col-lg-8 rep">
                        <hr />
                        <textarea id="txtSql" class="form-control clearBox fileContentBox" name="inputTextToSave" rows="5"
                            onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;">Enter HQL here..</textarea>
                        <br />
                      <div class="form-group col-md-3">
                                <label for="table">Table</label>
                                <input type="text" name="table" class="form-control clearBox" id="inputName1" id="table"
                                    placeholder="Table Name">
                            </div>

                            <div class="form-group col-md-3">
                                <label for="mode">Mode</label>
                                <select class="form-control" id="inputName2">
                                    <option>Overwrite</option>
                                    <option>Append</option>
                                </select>
                            </div>
                        </div>
                 <button type="submit" formaction="/talend" id="submit_tld" class="btn tal_btn btn-md btn-secondary" onClick="return saveTalend()">Save Talend</button>
                  <input type="hidden" id="talend_se" value="0" name="nest_talend" />

` Если у вас есть какие-либо ссылки на это или какие-либо входные данные приветствуются. ТИА.

1 Ответ

0 голосов
/ 20 марта 2019

Вы, похоже, используете shell.mkdir в своем коде, но shell нигде не определено - по крайней мере, в приведенном вами примере кода.Почему бы вам не использовать fs.mkdir вместо этого?Кроме того, вам нужно \ между: base_path и app_name:

base_path + '\' + app_name

, поскольку base_path = 'C:\Projects'.

Еще лучше, используйте path.join чтобы убедиться, что объединенный путь не будет зависеть от платформы:

Вы также можете использовать: JSON.stringify(fields.nest_talend) вместо .toString(), поскольку, если fields.nest_talend является объектом, он вернет строку, равную: '[object Object]'.

Наконец, ваш звонок на fs. writeFileSync неверный.Поскольку файл будет записан синхронно, обратный вызов не требуется.Кроме того, первый параметр должен быть местоположением файла, который будет записан.Попробуйте это:

fs.writeFileSync('location-path/file.json', tal_js, 'utf8');

Я думаю, что после этих изменений ваш код будет работать.

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