Javascript 如何使用autocomplete创建文本输入,然后在express中显示mysql数据库中的数据?
因此,我有一个表单,用户将在其中选择输入。首先,我想创建一个文本输入,当用户编写例如a时,它将建议MYSQL数据库中以a等开头的所有数据。表单的页面是/air_tickets,然后用户将被重定向到另一个页面。 文件结构: 在views文件夹中,有所有my.ejs html页面。 机票 airticketcontroller.js 所有数据都将来自一个名为flight的MYSQL表,并具有诸如from_destination和to_destination之类的列Javascript 如何使用autocomplete创建文本输入,然后在express中显示mysql数据库中的数据?,javascript,mysql,node.js,express,ejs,Javascript,Mysql,Node.js,Express,Ejs,因此,我有一个表单,用户将在其中选择输入。首先,我想创建一个文本输入,当用户编写例如a时,它将建议MYSQL数据库中以a等开头的所有数据。表单的页面是/air_tickets,然后用户将被重定向到另一个页面。 文件结构: 在views文件夹中,有所有my.ejs html页面。 机票 airticketcontroller.js 所有数据都将来自一个名为flight的MYSQL表,并具有诸如from_destination和to_destination之类的列 我不能正确地包括typeahead
我不能正确地包括typeahead库。但是,如果您知道根据我的SQL查询创建自动更正文本的其他方法,请向我推荐。我发现了关于jQuery autocomplete的以下内容:
<script>
$(function() {
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
$("#tags").autocomplete({
source: availableTags
});
});
</script>
其中tags是文本输入的id。而且效果很好。
尽管如此,我现在的问题是如何从数据库中获取数据首先,随着原始问题的进展,您应该编辑问题标题,您应该在另一个问题中提问 尽管如此,我现在的问题是如何从数据库部分获取数据 而不是表单id=表单提交,而是表单操作=表单提交 在表单中放置一个type=submit的按钮或输入。 编辑app.js的bodyParser行以 添加module.exports=app;在app.js的末尾添加module.exports=connection;在airTicketsController.js的末尾,现在还从airTicketsController.js、ejs表单和index.js中删除自动填充代码,以避免不必要的干扰 然后你必须通过添加以下内容来阅读表格 然后在newpage上使用这两个变量根据需要查询数据库
我更新了我的文件夹结构和代码的更多细节。它会运行,但在下一页它不会显示任何内容,如果我在sql查询中输入类似的内容,则只会显示一个空表。WHERE from_destination='Paris'和to_destination='London',然后显示results@Themis所以下一页即将到来,但会显示手动键入字段的结果?尝试console.logvariable1和variable2,查看变量是否正确初始化。在router.post的末尾和router.get的开头执行此操作。您得到了什么。@Themis还尝试将urlencoded{extended:true}转换为false,并检查是否有差异。虽然,如果只是手动输入字段而不是?’来给出结果,那么您的变量可能有问题。我尝试了,但没有任何改变。我不知道,我已经检查过我的变量很多次了
<script>
$(document).ready(function() {
$('input.typeahead').typeahead({
name: 'typeahead',
remote: 'http://localhost:3000/search?key=%QUERY',
limit: 10
});
});
</script>
var express = require('express');
var router = express.Router();
// Air tickets controller
const airTicketsController = require('../controllers/airTicketsController');
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('home', { title: 'Express' });
});
// Air tickets page
router.get('/air_tickets', function(req, res, next) {
res.render('air_tickets', { title: 'Air tickets' });
});
router.get('/search', airTicketsController.fromDestinations);
const mysql = require('mysql');
// DB connection
const connection = mysql.createConnection({
host: 'localhost',
user: 'myuser',
password: 'mypassword',
database: 'mydatabase'
});
connection.connect(function(error) {
if (!!error) console.log(error);
else console.log('CONGRATS! Database Connected!');
});
//---------------
// autocomplete for from_destination
exports.fromDestinations = (req, res) => {
connection.query('SELECT from_destination FROM flight where from_destination LIKE "%' + req.query.key + '%"',
function(err, rows, fields) {
if (err) throw err;
var data = [];
for (i = 0; i < rows.length; i++) {
data.push(rows[i].from_destination);
}
res.end(JSON.stringify(data));
});
}
const path = require('path');
const express = require('express');
const ejs = require('ejs');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const app = express();
// DB connection
const connection = mysql.createConnection({
host: 'localhost',
user: 'myuser',
password: 'mypassword',
database: 'mydatabase'
});
connection.connect(function(error) {
if (!!error) console.log(error);
else console.log('CONGRATS! Database Connected! (app)');
});
//set views file
app.set('views', path.join(__dirname, 'views'));
//set public file
app.use(express.static(__dirname + '/public'));
//set view engine
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
const routes = require('./server/routes/index');
app.use('/', routes);
// Server Listening
app.listen(3000, () => {
console.log('Server is running at port 3000');
});
<script>
$(function() {
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
$("#tags").autocomplete({
source: availableTags
});
});
</script>
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
var variable1, variable2;
router.post('/form-submit', function(req,res,next){
variable1 = req.body.from_destination;
variable2 = req.body.to_destination
res.redirect('/yournextpage');
});
router.get('/yournextpage', function(req,res, next){
airTicketsController.query("SELECT * FROM flight WHERE your_column1=? AND your_column2=?",[variable1,variable2],function(err, results, fields){
res.render('yournextpage', {title: 'flightdata', retrieved: results});
});
});
module.exports = router;