下面是我的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;
答案 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