Node.js/Express.jsアプリケーションでは、name
プライマリキーが以下のようになるように、以下のES6 AppUser
モデルオブジェクトにどのような変更を加える必要がありますか?常にユニークであるか?ES6用ユニークなプライマリキーNode.js/Express.jsモデルオブジェクト
コンテキストとして、ユーザは別のOAuth2認証サーバによって認証されているため、この特定のクライアントNode.js/Express.jsアプリケーションはユーザの情報をローカルデータベースに保存しません。したがって、AppUser
インスタンスはメモリ内にのみ存在し、ユーザーに関する一時的な情報の所有者になります。ユーザーがローカルに保持されていないため、MongoDBなどのデータストアに依存してプライマリキーを適用することはできません。
'use strict';
module.exports = class AppUser {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
getSomeOther() {
return this.someOther;
}
setSomeOther(other) {
this.someOther = other;
}
}
そして、ここでは他の場所でアプリ内AppUser
の新しいインスタンスをインスタンス化するコードの例です:
は、テストの目的でthe app/models
directory of this GitHub sample appに追加されたappuser.js
ファイル、ためのコードです
var AppUser = require("./models/appuser.js");
...
var newUser = new AppUser(uname);
あなたはどこかのユーザ名を格納する必要があります。 OAuth2認証サーバーでモデルを更新して一意のキーを適用するか、クライアントアプリケーションサーバーからユーザー名を格納するかどうかに関係なく、認証サーバーにアクセスできない場合は、データベースに使用されている各名前を格納し、認証前にdbを照会して一意であることを確認することをお勧めします。 –
@realseanp問題は、Node.jsユーザが、トークンなどのような永続化されてはいけないさまざまな情報を一時的に保存する必要があるということです。あなたのアプローチでは、ユーザ名の主キーだけでなく、永続化する必要のないユーザのための「一時的な」データを保存する他のクラスもあります。これは複雑な修正のようです。 Javaでは、メモリ内のクラスのすべてのインスタンスを単純に取得し、プライマリキーで個々にアクセスする方法があります。クラスのインスタンスを反復するNode.jsの方法はありますか? – FirstOfMany
Expressセッションモジュールhttps://github.com/expressjs/sessionを使用して、セッションにデータを一時的に格納することができます。あなたが言ったように、ユーザー名は永続的に持続する必要があり、それは 'LocalUser'モデルを必要とすると思います。 Expressセッションはデフォルトでセッションをメモリに保存しますが、それは生産には適していないことに注意してください。セッションはデータベースに保存する必要があります(セッション参照を表現する多くのセッションストアモジュールの1つを使用して自動的に行うことができます)。 –