简体   繁体   English

如何从 NodeJS 中的 SQL 服务器获取列表记录

[英]How can I get list record from SQL Server in NodeJS

I start to develop a simple web application with NodeJS.我开始使用 NodeJS 开发一个简单的 web 应用程序。 and when I try to get a list record from SQL Server to show on the list page but somehow it's not working.当我尝试从 SQL 服务器获取列表记录以显示在列表页面上时,但不知何故它不起作用。

Here is the code:这是代码:

const express = require("express");
const bodyParser = require("body-parser");
const sql = require("mssql");
const DBUtils = require("./DBUtils");

const app = express();

app.get("/all", (req, res, next) => {
  let mypromise = new Promise((reso, rej) => {
    let nameList = DBUtils.getNameList(sql);
    if (nameList !== null || typeof nameList !== "undefined") {
      reso(nameList);
    } else {
      rej("Error");
    }
  })
    .then((result) => {
      res.send(result);
    })
    .catch((err) => {
      console.log(err);
    });
});

app.get("/", (req, res, next) => {
  console.log("the / route");
  res.send("<h1>Hello to NodeJS</h1>");
});

app.listen(5003);

My DBUtils我的 DBUtils

const config = {
  user: "sa",
  password: "123",
  server: "DESKTOP-7KGJI7L", // You can use 'localhost\\instance' to connect to named instance
  database: "java",
  options: {
    encrypt: false,
  },
};

const getNameList = (sql) => {
  let nameList = "";
  let errorString = "";
  // Create connection
  sql.connect(config, function (err) {
    // Err
    if (err) {
      console.log(err);
    }

    // Create Request object
    let sqlRequest = new sql.Request();

    // QueryString
    let queryString = `select * from NAME`;
    // Run the query
    sqlRequest.query(queryString, (err, data) => {
      if (err) console.log(err);

      //console.log(data); //data.recordset(array)[index].name
      data.recordset.forEach((el) => {
        nameList += `<li>${el.name}</li>`;
      });
      return nameList;
    });
  });
};

exports.getNameList = getNameList;

I pretty sure something wrong in Promise line but don't know how to fix it.我很确定 Promise 线有问题,但不知道如何解决。 Any suggest?有什么建议吗?

I think you are a newbie in Nodejs You made a common mistake.我认为你是 Nodejs 的新手你犯了一个常见的错误。 You did not use promise pattern correctly.您没有正确使用promise模式。 Also, no need to pass next callback unless required.此外,除非需要,否则无需传递next回调。

Change getNameList as below:更改 getNameList 如下:

const getNameList = (sql) => {
  let nameList = "";
  let errorString = "";
  // Create connection
  return new Promise (function(resolve,reject) {
  sql.connect(config, function (err) {
    // Err
    if (err) {
      console.log(err);
       reject(err)
    }

    // Create Request object
    let sqlRequest = new sql.Request();

    // QueryString
    let queryString = `select * from NAME`;
    // Run the query
    sqlRequest.query(queryString, (err, data) => {
      if (err) {console.log(err)
         reject(err)
       }
      //console.log(data); //data.recordset(array)[index].name
      data.recordset.forEach((el) => {
        nameList += `<li>${el.name}</li>`;
      });
      resolve(nameList);
     });
    });
  })
};

Change app.get("/all") as below:更改 app.get("/all") 如下:

 app.get("/all", (req, res) => {
        DBUtils.getNameList(sql).then(function(list) {
            res.status(200).send(list)
        }).catch(function(err) { //handle error here
         res.status(500)
        })
    })
  • Moreover, learn how to use promises and async-await.此外,学习如何使用 Promise 和 async-await。
  • Use appropriate body-parser as per requirement ie json , text etc.根据要求使用适当body-parser ,即jsontext等。
  • Learn how and when to use next了解如何以及何时使用next

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 NodeJS-从SQL Server获取记录并传递到Web服务 - NodeJS - Get record from SQL Server and pass to a Webservice 如何从Express Server和Node.js筛选GET查询 - How can i filter a GET query from express server and nodejs 如何通过nodejs通过apollo-server从服务器获取所有数据 - How can i get all data from server by apollo-server by nodejs 使用 nodejs 服务器和 Pug 如何一次显示一个列表中的元素并使用按钮进行迭代? - Using a nodejs server and Pug how can I display elements from a list one at a time and iterate using a button? 如何从 Angular 中的 Nodejs 服务器的 HTTP 响应中获取数据类型 - How can I get the data type from an HTTP response from a Nodejs server in Angular 如何让我的 NodeJS 应用程序在服务器上运行? - How can I get my NodeJS application working on a server? 我如何从HTML将JSON数据获取到Node.js服务器 - How do i get json data from HTML to Nodejs server 如何将值从角形式移动到服务器nodejs - How can i move value from angular form to server nodejs React和NodeJS:如何从服务器向客户端发送数据? - React and NodeJS: How can i send data from server to client? 如何从NodeJS服务器向客户端发送信息? - How can I send information from NodeJS server to client side?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM