Я пытаюсь написать простой server.js в Node, который отправляет данные формы из моего html файла в MySQL. Но я получаю синтаксическую ошибку. Я разместил код и ошибку ниже. Я изо всех сил пытаюсь решить эту проблему.
Ошибка
http://localhost:3000/submit
Error: No default engine was specified and no extension was provided.
at new View (C:\website\node_modules\express\lib\view.js:61:11)
at Function.render (C:\website\node_modules\express\lib\application.js:570:12)
at ServerResponse.render (C:\website\node_modules\express\lib\response.js:1008:7)
at C:\website\index.js:21:9
at Layer.handle [as handle_request] (C:\website\node_modules\express\lib\router\layer.js:95:5)
at next (C:\website\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\website\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\website\node_modules\express\lib\router\layer.js:95:5)
at C:\website\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\website\node_modules\express\lib\router\index.js:335:12)
index.html
<form action = "/submit" method = "post">
<input id = "name" type = "text" name = "name" placeholder = "Type your name...">
<input id = "message" type = "text" name = "message" placeholder = "Type message...">
<input class = "submit_message" type = "submit" value = "Send">
</form>
index.js
var express = require('express');
var app = express();
var mysql = require('mysql');
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static('public'));
var connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "mywebsite"
});
connection.connect();
app.get('/submit',function(req,res) {
res.render('index');
});
app.post('/submit',urlencodedParser, function(req, res, next) {
console.info(req.body.name);
console.info(req.body.message);
connection.connect(function(err) {
if (err) throw err;
console.info("connected");
var sql = "INSERT INTO `users` (`name`,`message`) VALUES ('" + req.body.name + "', '" + req.body.message + "')";
con.query(sql, function(err, result) {
if (err) throw err;
console.info("table created");
});
});
res.render('index', {title: 'Express'});
});
connection.end();
app.listen(3000, function () {
console.info('Listening on port 3000');
});
База данных MySQL
Так должна выглядеть моя база данных
что такое индекс в функции рендеринга, это html или ejs?
мне нужно использовать app.set('view engine', 'jade');
Вам больше не нужно использовать движок просмотра ... но какую версию express
вы используете? вы можете просто использовать res.sendFile('index.html file location')
Я провел рефакторинг вашего кода в соответствии с указанным вопросом. например, вам нужно упомянуть весь наш статический контент внутри общедоступного каталога (например, ваш index.html). Также вы сделали синтаксическую ошибку, т.е. вы написали con.query(sql, function(err, result)
вместо connection.query(sql, function (err, result)
, вместо рендеринга файла index.html, как вы делали res.render('index', {title: 'Express'});
. лучше отправить файл на свой public / index.html res.sendFile('public/index.html', { root: __dirname });
, как указано @Pogrindis
var express = require('express');
var app = express();
var mysql = require('mysql');
var connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "mywebsite"
});
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static('public'));
app.set('view engine', 'jade');
app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
res.render('index.html');
});
app.post('/submit', urlencodedParser, function (req, res) {
console.info("Im here");
console.info(req.body.name);
console.info(req.body.message);
connection.connect(function (err) {
if (err) throw err;
console.info("connected");
var sql = "INSERT INTO `users` (`name`,`message`) VALUES ('" + req.body.name + "', '" + req.body.message + "')";
connection.query(sql, function (err, result) {
if (err) throw err;
console.info("table created");
});
});
res.sendFile('public/index.html', { root: __dirname });
});
app.listen(3000, function () {
console.info('Listening on port 3000');
});
пожалуйста, следуйте пути к файлу как:
Я успешно могу сохранить данные в моей БД, которые были введены из текстового поля ввода (имя, сообщение) в index.html. Удачного кодирования !!
Возможный дубликат Ошибка: не указан механизм по умолчанию и не предоставлено расширение.