我最近使用离子框架(也使用phonegap android / ios)制作了简单的应用程序。我需要将一些用户数据存储在数据库中。我发现了firebase并成功将其集成到我的应用程序中。我允许用户匿名登录或通过谷歌登录。在我的情况下,每个用户应该只看到他的内容,所以我添加了规则 - 他们工作。然而,我的应用程序需要在移动平台(android / ios)上没有互联网连接的情况下运行,而firebase不能在javascript中提供完全离线存储(仅限temponary)(持久存储目前仅在本机中实现)。所以基本上我撞墙了。我被告知CouchDB / PouchDB,它确实支持离线存储和与远程服务器同步。我在cloudant上创建了一个帐户,但后来我记得我需要用户授权 - 正如我所说,用户只需拥有自己的数据。因此,假设客户只有本地数据库,并且用户也在远程服务器上使用谷歌数据库登录,因此他可以切换设备并使用相同(他自己的)数据。但我在CouchDB(cloudant)中找不到这样的工具。有没有其他解决方案,它可以顺利地使用离子并提供:
TL; DR:我正在寻找使用远程数据库+本地数据库并在它们之间同步的离子/ angularjs / cordova托管服务。
答案 0 :(得分:0)
使用MongoDB有什么问题,使用npm mongoose最容易与Express / Node.js集成。它是非常受欢迎且存储数据的好方法,与firebase类似。 例如:
var Express = require('express'),
app = Express.router();
app.route('/api/auth/signup').post(users.signup);
架构示例:
var mongoose = require('mongoose'),
Schema = mongoose.Schema
var UserSchema = new Schema({
firstName: {
type: String,
trim: true,
default: '',
required: 'Please fill in your first name'//message given if you fail to provide the required field.
},
lastName: {
type: String,
trim: true,
default: '',
required: 'Please fill in your last name'
},
displayName: {
type: String,
trim: true
},
email: {
type: String,
unique: 'Email already exists. Sign In?',
lowercase: true,
trim: true,
default: '',
validate: [validateLocalStrategyEmail, 'Please fill a valid email address'],//create a custom Email Validation strategy
required: 'Please enter a valid business Email'
},
});
样本控制器:
exports.signup = function (req, res) {
// For security measurement we remove the roles from the req.body object
delete req.body.roles;
// Init user and add missing fields
var user = new User(req.body);
user.provider = 'local';
user.displayName = user.firstName + ' ' + user.lastName;
// Then save the user
user.save(function (err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
// Remove sensitive data before login
user.password = undefined;
user.salt = undefined;
var jwtToken = authentication.signToken(user);
res.json({ user: user, token: jwtToken });
}
});
};
你可以在MEAN.js Github上找到一些。 但您必须使用LocalStorage。如果您希望它在iPad / iPhone上运行,可以使用离子应用程序的JSON Web令牌。
答案 1 :(得分:0)
最好的办法是使用适用于本地存储的PouchDB(适用于ionic / cordova),并使用几行代码同步到远程couchdb服务器:
var localDB = new PouchDB('mylocaldb');
var remoteDB = new PouchDB('http://localhost:5984/myremotedb');
localDB.sync(remoteDB);
唯一棘手的问题是具有身份验证的远程服务器。 CouchDB可以开箱即用地处理oauth,但是在每个数据库的情况下,这意味着您需要为每个用户创建一个数据库,这是许多人所做的,但这非常复杂。做一个search for CouchDB on npmjs.com,看看会出现什么。
或者,您可以将CouchDB包装在Express之类的节点服务器之后,并在传递请求之前在Express中处理auth。
这不是一件容易的事,而且一旦你开始使用它,Firebase会收取一笔不小的财产。如果您对服务器端的内容不是很大,那么更简单的方法可能是使用meteor或hoodie。