在 Node.js (React) 中更改为不同的页面/组件时如何运行不同的 SQL 函数?

Posted

技术标签:

【中文标题】在 Node.js (React) 中更改为不同的页面/组件时如何运行不同的 SQL 函数?【英文标题】:How to run a different SQL function when changing to a different page/component in Node.js (React)? 【发布时间】:2019-08-08 02:52:53 【问题描述】:

首先,我设法使用 mssql 模块以及 node.js、express 和 axios 从 SQL 中提取信息。 (server.js)

当我运行两个开发服务器(React:3000,节点:5000)时,它工作正常。

这是 server.js 的代码

const express = require('express');
var cors = require('cors')
const app = express();

app.use(cors())
app.enable('trust proxy');

app.get('/', function (req, res) 

    const sql = require("mssql");

    //DB configuration object
    const config = 
        user: 'INSERT USERNAME HERE',
        password: 'INSERT PASSWORD HERE',
        server: 'INSERT SERVER NAME HERE',  
        database: 'INSERT DB NAME HERE' 
    ;

    //connnecting to DB
    sql.connect(config, function (err) 

        if (err) console.log(err);
         //if (err) console.log(err);

        //creates Request object
        const request = new sql.Request();

       //search query string
       const queryString = "INSERT QUERY HERE"

        //query to DB and gets data
        request.query(queryString, function (err, recordset) 

            //to log user ip address (nothing particular)
            console.dir(req.ip)

            if (err) console.log(err)

            // send records as a response
            res.send(recordset);
            sql.close();
        );
    );
);

const server = app.listen(5000,function () 
    console.log('Server is running..');
);

我的问题是,当我更改为不同的页面或组件时,如何使 queryString 动态化?

这是我将信息放入的原始表格组件。

import Page from 'components/Page';
import React from 'react';
import  Card, CardBody, CardHeader, Col, Row  from 'reactstrap';
import Result from 'components/Result';
import API from '../routes/api/api';

class TablePage extends React.Component 
  constructor(props)
    super(props);
    this.state = 
            userList: null
    ;
  
  render()  

    const  userList  = this.state;
    const tableTypes = ['Report'];
    var today = new Date();
    today.setDate(today.getDate() -8);
    var today2 = new Date().toISOString().slice(0, 10)
    var dd = today.getDate();
    var mm = today.getMonth()+1;
    var yyyy = today.getFullYear();

    if(dd<10) 
    dd = '0'+dd
       
    if(mm<10) 
    mm = '0'+mm
        
     today = yyyy + '-' + mm + '-' + dd;

    return (
      <Page
        title="Completed RFQs" + " " + today + "~" + today2
        breadcrumbs=[ name: 'report', active: true ]
        className="TablePage"
      >
        tableTypes.map((tableType, index) => (
          <Row key=index>
            <Col>
              <Card className="mb-3">
                <CardHeader>tableType || 'default'</CardHeader>
                <CardBody>
                  <Result  userList=userList />
                </CardBody>
              </Card>
            </Col>
          </Row>
        ))
      </Page>
    );

  

  async componentDidMount() 
          try
        let userData = await API.get('/')
         .then(res => res.data);

         const users = [];
         for (var i in userData.recordsets) 
          for (var j in userData.recordsets[i])    
             var x = userData.recordsets[i][j];
             users.push(x)
          
    //end for loop 

const userList = users.map((user,index)=>
  <tr key=index>
  <th scope = "row">(i++)+1</th>
  <th scope = "row">user.AEG_PERSON_NAMEEN</th>
  <th scope = "row">user.OLDPRDNO</th>
  <th scope = "row">user.PWNO</th>
  <th scope = "row">user.SALES_REF</th>
  <th scope = "row">user.JUM_PTYPE1</th>
  <th scope = "row">user.SALES_PERSON_NAMEEN</th>
  <th scope = "row">user.KEYWORD_ENDUSER</th>
  <th scope = "row">user.REPLIED_DATE.slice(0,10)</th>
  <th scope = "row">user.D</th>
  </tr>);

this.setState(
...this.state, ...
userList

);   
        
         catch(e)
        console.log(`???? Axios request failed: $e`);
      
  ;


export default TablePage;

假设我正在制作另一个页面以在表格中显示不同的信息,我如何使用不同的查询运行该 server.js 函数? 我真的需要制作另一个 server2.js,因为代码是多余的吗?

我的理想方式是在切换到不同页面时对同一个函数运行不同的查询,但除了创建另一个 server2.js 之外,我只是不知道如何以不同的方式执行此操作。

【问题讨论】:

【参考方案1】:

您到底想查询什么?你能举两个例子吗?通常,您可以使用以下路由获取参数:

app.use('/user/:id', function (req, res)

让 id = req.params.id let sqlQuery ="Select USER where id=" + id

对不起,糟糕的写作和编码,被智能手机很快弄脏了。

但我认为我没有完全理解这个问题;)

【讨论】:

以上是关于在 Node.js (React) 中更改为不同的页面/组件时如何运行不同的 SQL 函数?的主要内容,如果未能解决你的问题,请参考以下文章

javascript Node.js中更强的加密和解密

React-Router vs Node.js

无法在 node.js 或 react 中访问 Gitlab env 变量

为啥 MPMoviePlayerController 全屏按钮图标在 iOS 10 中更改为标题图标?

在 shell 脚本中更改为 root 用户

使用 Node.js 后端在我的 React 应用程序中启用 CORS