jquery - 根据在nodejs ajax jquery上登录的用户过滤数据
问题描述
我的问题是关于根据 jquery 数据表上的用户登录来过滤数据。我已经设法使用 jquery ajax 从 jquery 数据表上的数据库中检索数据。现在,当我使用用户登录时,用户看到的不是他/她自己的表的所有表。(换句话说,我只想转到包含股票数据的用户个人资料页面)我在登录时没有收到错误我可以看到服务器控制台上的用户信息,但在 html 端,我猜有些东西不完整。我的数据库包含 2 个表(用户、库存),我可以从 stok 表的“id”列访问用户表(id)。
登录.js
router.post('/', function(request, response) {
var username = request.body.user_name;
var password = request.body.pass;
console.log(username);
console.log(password);
connection.query('SELECT * FROM users WHERE user_name=?', [username, password], function(error, results) {
console.log(results);
if(error){throw error;}
if(results.length>0){
if(results[0].pass == password){
response.sendFile(path.join(__dirname +'/secondPage.html')); } else{
response.sendFile(path.join(__dirname + '/error.html'));
}
}else{
response.sendFile(path.join(__dirname + '/error.html'));
} });});
secondPage.js
/*mysql connection and requirements*/
router.use(bodyParser.urlencoded({extended : true}));
router.use(bodyParser.json());
//list of the stocks
router.get('/',(req,res)=>{
connection.query('SELECT * FROM stok s, users u WHERE s.id= u.id',(err,rows,fields)=>{
/*I know I should add "AND u.id=?" to this query but my pages cannot handle id between pages" */
if(!err){
console.log(rows);
var objs = [];
for (var i = 0;i < rows.length; i++) {
objs.push(rows[i]);
}
var ret={"data":objs};
res.end(JSON.stringify(ret));
console.log(JSON.stringify(ret));
}
else{
console.log(err);
}
});
});
HTML-secondpage
<html>
<head>
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/dataTables.jqueryui.min.css">
<script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.19/js/dataTables.jqueryui.min.js"></script>
<!-- <script type="text/javascript" charset="utf-8" src="js/dataTables.editor.min.js"></script>-->
</head>
<body>
<script>
$(document).ready(function (){
$('#stockManager').DataTable({
responsive: true,
ajax : {
url : "http://localhost:3000/secondPage",
},
columns: [
{data : "urun_adi"},
{data : "barkod"},
{data : "stok_sayi"},
{data : "satis_fiyati"},
{data : "maliyet"},
{data : "firma_adi"}
],
select: true
});
});
</script>
<table id="stockManager" class="display" style="width:100%">
<thead>
<tr>
<th>Adı</th>
<th>Kod</th>
<th>Miktar</th>
<th>Satış Fiyatı</th>
<th>Maliyet</th>
<th>Tedarikçi</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</script>
</body>
</html>
LOGIN HTML
<body>
<div class="limiter">
<div class="container-login100" style="background-image: url('images/bg-01.jpg');">
<div class="wrap-login100 p-l-55 p-r-55 p-t-65 p-b-54">
<form action="http://localhost:3000/login" method="POST" class="login100-form validate-form">
<span class="login100-form-title p-b-49">
Login
</span>
<div class="wrap-input100 validate-input m-b-23" data-validate = "Username is reauired">
<span class="label-input100">Username</span>
<input id="username" class="input100" type="username" name="user_name" placeholder="Username" required>
<span class="focus-input100" data-symbol=""></span>
</div>
<div class="wrap-input100 validate-input" data-validate="Password is required">
<span class="label-input100">Password</span>
<input id="password" class="input100" type="password" name="pass" placeholder="Password" required>
<span class="focus-input100" data-symbol=""></span>
</div>
<div class="text-right p-t-8 p-b-31">
<a href="#">
Forgot password?
</a>
</div>
<div class="text-right p-t-8 p-b-31">
<a href="#">
Change password(recommended for first loggers)
</a>
</div>
<div class="container-login100-form-btn">
<div class="wrap-login100-form-btn">
<div class="login100-form-bgbtn"></div>
<button id="records" type="submit" class="login100-form-btn">
Login
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
应用程序.js
const express = require('express');
const app = express();
const loginRoutes = require('./login');
const stockRoutes = require('./secondPage');
// Routes which should handle requests
app.use('/login', loginRoutes);
app.use('/secondPage', stockRoutes);
//bodyparser for posts
module.exports = app;
解决方案
您需要为后端传递用户名
ajax : {
url : "http://localhost:3000/secondPage/johndoe",
},
获取查询字符串参数,并修复 SQL:
router.get('/:username',(req,res)=>{
connection.query('SELECT * FROM stok s, users u WHERE s.id= u.id and username=?',[req.params.username],(err,rows,fields)=>{
if(!err){
var objs = [];
for (var i = 0;i < rows.length; i++) {
objs.push(rows[i]);
}
var ret={"data":objs};
res.end(JSON.stringify(ret));
console.log(JSON.stringify(ret));
}else{
console.log(err);} });});
推荐阅读
- python - 在 3.9 中使用 pandas 将 csv 文件导入 python,但“找不到文件”失败
- javascript - 如何在Javascript中计算超大数的阶乘?
- amazon-web-services - dynamodb表名更改时如何处理lambda函数重新部署
- python - 如何使用不重复的条件从熊猫数据框中提取特定行?
- postgresql - PostgreSQL RDS 中后台工作人员锁定的表
- python - 创建字典的最快方法是在 2D numpy 数组中作为分组样式查找?
- regex - 将正前瞻正则表达式转换为负前瞻正则表达式?
- terraform - terraform 尝试安装未在模块或子模块中的任何地方描述的提供程序
- mysql - Mysql select查询获取包含多个id的行
- python - /blogs/ 'post' 处的 NoReverseMatch 不是已注册的命名空间