我需要MySQL声明中的承诺吗?

时间:2018-06-08 23:16:07

标签: mysql node.js

下面是我的Node.js应用程序中的MySQL语句。我在MySQL函数中使用了一个promise来使API端点工作。这是Node.js和MySQL的典型模式吗?

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

app.use(express.static('client'));
const config = require('./config')

var mysql = require('mysql');

var con = mysql.createConnection({
    host: config.HOST,
    user: config.USER,
    password: config.PASSWORD,
    database: config.DATABASE
});

function GetConsumers(req, res) {
    return new Promise(function (resolve, reject) {
        con.connect(function (err) {
            if (err) throw err;
            con.query("SELECT * FROM " + config.DATABASE + ".Contracts", function (err, result, fields) {
                if (err) throw err;
                //console.log(result);
                resolve(result);
            });
        });
    }).then(rows => res.send(rows));
}

app.get('/consumers', GetConsumers);

module.exports = app;

1 个答案:

答案 0 :(得分:1)

正如乔治评论的那样,你真的不需要在这里回复承诺。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout     xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/red_explosion"
    tools:context=".MainActivity">
    <include
        android:id="@+id/app_bar"
        layout="@layout/app_bar"></include>

    <Button
        android:id="@+id/login_button"
        android:layout_width="105dp"
        android:layout_height="60dp"
        android:layout_marginBottom="120dp"
        android:layout_marginLeft="55dp"
        android:layout_marginTop="330dp"
        android:background="@drawable/button_style"
        android:text="Login"
        android:textColor="@android:color/black"
        android:textSize="18sp"
        android:textStyle="bold"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.089"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/register_button"
        android:layout_width="105dp"
        android:layout_height="60dp"
        android:layout_marginBottom="120dp"
        android:layout_marginRight="75dp"
        android:layout_marginTop="330dp"
        android:background="@drawable/button_style"
        android:text="Register"
        android:textColor="@android:color/black"
        android:textSize="18sp"
        android:textStyle="bold"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/login_table"
        android:layout_width="300dp"
        android:layout_height="500dp"
        android:background="@drawable/border"
        android:translationZ="5dp"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/app_bar">

        <TextView
            android:id="@+id/textView"
            android:layout_width="150dp"
            android:layout_height="30dp"
            android:text="TextView"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:layout_editor_absoluteY="381dp" />
    </TableLayout>


</android.support.constraint.ConstraintLayout>

}

如果你真的想使用promises,那么抓住异常总是一个好习惯。

function GetConsumers(req, res) {

    con.connect(function (err) {
        if (err) {
           res.send(err)
        };
        con.query("SELECT * FROM " + config.DATABASE + ".Contracts", function (err, result, fields) {
            if (err) {
               res.send(err)
           };
            //console.log(result);
            res.send(result)
        });
    });

}

在任何您想要的地方调用GetConsumers函数。

function GetConsumers(req, res) {
return new Promise(function (resolve, reject) {
    con.connect(function (err) {
          if (err){
              reject(err);
          }

        con.query("SELECT * FROM " + config.DATABASE + ".Contracts", 
        function (err, result, fields) {
            if (err){
              reject(err);
            }
            //console.log(result);
            resolve(result);
        });
    });
})

Mysql npm具有如何使用该模块的良好文档。您可以参考更多here