私はAngular 2で構築されたSPA用のAPIを構築しています。このアプリケーションでは、私は独立型APIとAngular 2アプリを持っています。したがって、それらは2つの独立したnode.jsサーバー上に構築されています。私はnode.jsを使用しており、JWT(json web token)とのログインや登録を処理する安全なAPIを構築するために 'express-connection'と 'mysql'モジュールと一緒に表現しています。だから私はURLを介して私のAngular 2アプリでデータにアクセスできるようにこのAPIを構築しました。 'localhost:3000/data'というURLを使用して、 'localhost:3001 /'で動作するAngular 2アプリからjsonデータオブジェクトにアクセスできます。しかし、データが利用可能になると、このデータオブジェクト(ユーザーの配列)にアクセスするためのAPIも必要です。このタスクにアプローチ/達成する最善の方法は何ですか?私が今考えることのできる唯一の方法は、URLからデータを取得するためにhttp getを使うよりも、アプリケーションの読み込みを待つsetTimeout関数を持たせることです。この作業を達成するためのよりクリーンな方法が必要です。基本的に単純なノードサーバーが動作しているいくつかのコードがあります。私は、APIとAngular 2のコンセプトを構築することで幾分新しいですので、どんな助けも大歓迎です。ノードとエクスプレスでAPIを構築すると、URLからjsonデータを取得する方法は?
app.js
/** Dependencies **/
var logger = require('morgan'),
cors = require('cors'),
http = require('http'),
express = require('express'),
errorhandler = require('errorhandler'),
dotenv = require('dotenv'),
bodyParser = require('body-parser');
/** Setup **/
var app = express();
dotenv.load();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());
app.use(function(err, req, res, next) {
if (err.name === 'StatusError') {
res.send(err.status, err.message);
} else {
next(err);
}
});
if (process.env.NODE_ENV === 'development') {
app.use(logger('dev'));
app.use(errorhandler())
}
/** Requires **/
require('./config/sql.js')(app);
require('./config/routes.js')(app);
/** Port **/
var port = process.env.PORT || 3001;
http.createServer(app).listen(port, function (err) {
console.log('listening in http://localhost:' + port);
});
routes.js
// routes.js
module.exports = function(app) {
var query = require('./query.js')(app);
app.get('/data', function(req, res) {
query.getData(req,res);
});
};
sql.js
var connection = require('express-myconnection');
var mysql = require('mysql');
module.exports = function(app){
app.use(
connection(mysql,{
host : 'localhost',
user : 'root',
password: ‘password’,
port : 3306,
database: ‘my_project’
}, 'request')
);
};
query.js
// DB Queries
module.exports = function(app){
return {
getData: function(req, res) {
req.getConnection(function(err,connection){
connection.query('SELECT * FROM users',function(err,rows){
// console.log("success: ", rows);
res.json(rows);
});
});
}
}
};
のuser.jsの
setTimeout(function(){
// http.get function to call to API and grab data and create variable
},500);
// this is where I need an array of users that I get from a mysql database for login and registration logic
var users = [];
user.jsで実際に使用しているコードは表示されませんが、これはおそらく[非同期呼び出しから値を返す方法]のdupです(http://stackoverflow.com/questions/14220321/非同期呼び出しからの応答を返す)を使用することができます。奇妙なことに、あなたは実際の問題がどこにあるかを示すコードを表示しません。そして、はい、 'setTimeout()'は間違ったアプローチですが、あなたが何を推薦すべきかを知るために本当に何をしようとしているのかは不明です。 – jfriend00