gpt4 book ai didi

javascript - 搜索数据库 | NodeJS、Express、HTML

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:29 24 4
gpt4 key购买 nike

我正在尝试在 node.js 中编写一个简单的 Web 应用程序,该应用程序将允许用户在搜索栏中输入数据,然后将输入发送到服务器,服务器将使用用户生成的输入查询数据库。我已经设置并连接了数据库,但这是我的代码:

服务器

var express = require('express');
var sql = require('mysql');
var app = express();

//Configure application
app.set('views',__dirname + '/views'); //Set views directory
app.use(express.static(__dirname + '/JS'));
app.set('views engine', 'ejs'); //Set view engine to ejs
app.engine('html', require('ejs').renderFile);
app.use(function(req, res, next){ //Set no cache for the server
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next();
})

//Connect to mySQL database
var db = sql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'homeDB'
});
db.connect(function(err){
if(err){console.log('there was an error connecting to the database' + err);}
})

//Set up routers (request handlers)

//Return home page when root('/') is requsted
app.get('/', function(req, res){
res.render('index.html');
});

app.get('/search', function(req, res){ //GET method to access DB and return results in JSON
db.query('SELECT * FROM products WHERE product 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].product);
}
res.end(JSON.stringify(data));
});
});

app.get('/typeahead.bundle.js', function(req, res){ //When typeahead is requested, send it to client
var fileName = './typeahead.bundle.js';
var options = {
cacheControl: false,
root: __dirname
}
res.sendFile(fileName, options, function(err){
if(err){
console.log('there was an error sending ' + fileName + err);
res.status(err.status).end();
}else{console.log('Sent! ' + fileName);}
});
});

app.post('/search', function(req, res){ //POST method to access DB and return results in JSON
db.query('SELECT * FROM products WHERE product LIKE "%' + req.params.input + '%"',
function(err, rows, fields){
if(err) throw err;
var data = [];
for(i=0;i<rows.length;i++){
data.push(rows[i].product);
}
res.end(JSON.stringify(data));
console.log(req.params.input);
});
});

var server = app.listen(3000, function(){ //Start the server on port 3000
console.log('server has started on localhost:3000...')
});

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Express Application</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="/typeahead.bundle.js" type="text/javascript"></script>
</head>
<body>
<h1>Thank you for connecting to my server!</h1>

<form class="search" action="typeahead" method="post">
<input class="form-control typeahead tt-query" type="text" name="input" placeholder="Search">
<input class="btn btn-primary" type="submit" name="input" value="Submit">
</form>

<script type="text/javascript">
$(document).ready(function(){
$('input.typeahead').typeahead({
name: 'typeahead',
remote: 'http://localhost:3000/search?key=%QUERY',
limit: 10
});
});
</script>
</body>
</html>

现在我在 Node 中设置了所有路由器和中间件,但我似乎无法弄清楚如何简单地将用户输入发送到服务器。我尝试使用“req.query.key”来获取搜索输入的值,但在我的情况下实际上返回为未定义。那么,是否有办法通过“req.query.key”变量实际接收文本,是否还有更“传统”的方法来制作简单的数据库搜索栏?

附注总体而言,我对 Express 和 Node.js 编程还很陌生,因此,如果您发现任何常见错误或“草率”代码,我很乐意听到您的反馈。

最佳答案

您可以尝试使用 npm body-parser,代替 req.params.key,您可以放置​​ req.body.input (其中 input 是输入元素的名称)。

把这个:

app.use(bodyParser.urlencoded({
extended: true
}));

在模板引擎配置之前(在设置 View 之前)

关于javascript - 搜索数据库 | NodeJS、Express、HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41887641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com