【发布时间】:2016-11-26 23:59:46
【问题描述】:
我正在为使用 Angular 2 构建的 SPA 构建 API,对于这个应用程序,我有一个独立的 API,而不是 Angular 2 应用程序。所以它们建立在两个独立的 node.js 服务器上。我正在使用 node.js 和 express 以及 'express-connection' 和 'mysql' 模块来构建一个安全的 API 来处理登录和注册 JWT(json Web 令牌),当然还有其他任务。所以我已经成功地构建了这个 API,所以我可以通过 URL 使用我的 Angular 2 应用程序访问数据。我可以使用 URL 'localhost:3000/data' 从运行在 'localhost:3001/' 上的 Angular 2 应用程序访问 json 数据对象。但是,一旦数据可用,我还需要 API 能够访问此数据对象(用户数组)。处理/完成这项任务的最佳方法是什么?我现在能想到的唯一方法是有一个 setTimeout 函数等待应用程序加载,而不是使用 http get 从 url 中获取数据。必须有一种更清洁的方式来完成这项任务。这是我工作的一些代码,基本上是一个运行 express 的简单节点服务器。我对构建 API 和 Angular 2 概念有些陌生,因此非常感谢任何帮助。
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')
);
};
查询.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);
});
});
}
}
};
用户.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 中实际使用的代码,但这可能是 How to return a value from an asynchronous call 的副本。奇怪的是,您没有显示实际问题所在的代码。而且,是的,
setTimeout()是错误的方法,但不确定您真正想要做什么才能知道要推荐什么。
标签: javascript angularjs json node.js api