express+mongose簡易バックグラウンドデータインタフェースを実現
以前、vueに入門したばかりで、シンプルで完全な純vue 2ファミリーバケツのプロジェクトを作成しました.データはローカルjsonシミュレーションで要求されています.詳細はこちら:vue-proj-demo
データベースへの実際のアクセスを実現するために、node+express+mongoseにアクセスし、以前のvueページのバックグラウンドデータインタフェースを書き始めました.
本明細書に関連するソースコード:vue-node-proj
基本データモデルschema
以下mongodb操作に関する前提は、mongodb環境を構成することである.mongodbのインストール構成、mongoseの基本的な使用については、「http://gjincai.github.io/categories/mongodb/
mongodbは主に3つのデータモデルを構築しています.ユーザー情報データ構造:主にユーザー名(携帯電話)、パスワード、登録時間 を含む.商品情報データ構造:主に当該商品の情報であり、 ショッピングカート情報データ構造:ショッピングカート商品の大部分のフィールドは商品情報と同じである.主に
データベースの接続
データベースの接続を開始し、データベース
データベースの初期化
データベースに接続します.最初に接続したとき、データベースは空です.データベースに正常に接続された場合、データベースが空であるかどうかを確認します.空の場合は、初期化された商品データ(initGoods.json)をデータベースに挿入します.
データの更新update
mongoseデータの添削変更の基本操作、詳細は参考:ソースコードここで主に
eg:カートに加入する場合は、
vue-cliドメイン間リクエスト構成
フロントエンドvueプロジェクトの開発環境devアドレス:
現在のエンドがバックグラウンドとデータのインタラクションを行うと、ドメイン間で問題が発生します.フロントエンドでvue-cliの構成を変更することで解決できます.vue-cliの
そして、egは商品の詳細を要求する時:
ここでの要求url
Proxyの公式サイトのドキュメント:https://vuejs-templates.github.io/webpack/proxy.html
データベースへの実際のアクセスを実現するために、node+express+mongoseにアクセスし、以前のvueページのバックグラウンドデータインタフェースを書き始めました.
本明細書に関連するソースコード:vue-node-proj
基本データモデルschema
以下mongodb操作に関する前提は、mongodb環境を構成することである.mongodbのインストール構成、mongoseの基本的な使用については、「http://gjincai.github.io/categories/mongodb/
mongodbは主に3つのデータモデルを構築しています.
brand_id
が唯一の標識であり、brand_cate
が商品分類(男装、女装...)name
フィールドを介して
と
を関連付ける.cart_num、cart_isSelect
は、それぞれ当該商品のカートの数、フックの有無が選択された状態である.詳細は、//
const userSchema = new Schema({
name: {type: String},
pwd: {type: String},
time: {type: Date, default: Date.now}
})
//
const goodsSchema = new Schema({
brand_id: Number,
brand_cate: String,
brand_cateName: String,
brand_status: String,
brand_name: String,
brand_price: Number,
brand_desc: String,
brand_pic: String
})
//
const cartsSchema = new Schema({
name: String,
brand_id: Number,
brand_cate: String,
brand_name: String,
brand_price: Number,
brand_desc: String,
brand_pic: String,
cart_num: Number,
cart_isSelect: Boolean
})
データベースの接続
データベースの接続を開始し、データベース
test_nodeVue
が存在しない場合、この名前のmongodbデータベースが自動的に作成されます.const database = mongoose.connect('mongodb://127.0.0.1:27017/test_nodeVue')
database.connection.on('error', function(error){
console.log(' test_nodeVue :' + error)
return
})
database.connection.once('open', function(){
console.log(' test_nodeVue ')
//
initData();
})
データベースの初期化
データベースに接続します.最初に接続したとき、データベースは空です.データベースに正常に接続された場合、データベースが空であるかどうかを確認します.空の場合は、初期化された商品データ(initGoods.json)をデータベースに挿入します.
const initData = function () {
// goods
db.goodsModel.find({}, function(err, doc){
if (err) {
console.log('initData :' + err);
} else if (!doc.length) {
console.log('db goodsModel open first time');
// ,
initGoods.map(brand => {
db.goodsModel.create(brand)
})
// console.log(initGoods)
} else {
console.log('db open not first time');
}
})
}
データの更新update
mongoseデータの添削変更の基本操作、詳細は参考:ソースコードここで主に
update
:パラメータ:testModel.update(conditionsObj, updateObj, upsert, function(){})
conditionsObj:クエリー条件updateObj:更新が必要な内容upsert:conditionsObjが存在する場合、更新;存在しない場合はconditionsObj、upsertをベースに作成eg:カートに加入する場合は、
および id
に基づいて、この商品がユーザーのカートの中にすでに存在しているかどうかを判断する必要があります.存在する場合、更新;存在しない場合は、新規:// api addToCart
app.get('/api/goods/addToCart', function (req, res) {
let brand_id = req.query.brand_id
let name = req.query.name
let newCart = req.query
db.cartsModel.update({brand_id: brand_id, name: name}, {$set:newCart}, {upsert:true}, function(err){
if (err) {
console.log(' :' + err);
res.json({code: 700, msg:' :' + err})
return
} else {
// add
res.json({code: 200, msg:' '})
return
}
})
})
vue-cliドメイン間リクエスト構成
フロントエンドvueプロジェクトの開発環境devアドレス:
localhost:8080
、バックグラウンドnodeサーバのアクセスアドレス:127.0.0.1:8889
、(ローカルでオープンしているmongodbサービスのアドレスは:127.0.0.1:27017
)現在のエンドがバックグラウンドとデータのインタラクションを行うと、ドメイン間で問題が発生します.フロントエンドでvue-cliの構成を変更することで解決できます.vue-cliの
client/config/index.js
でdevオプションの{proxyTable}を構成します.proxyTable: {
// proxy all requests starting with /api to jsonplaceholder
'/api': {
target: 'http://127.0.0.1:8889/api',
changeOrigin: true,
pathRewrite: {
'^/api': '' // target /api、 , 404;
}
}
}
そして、egは商品の詳細を要求する時:
this.$http({
url: '/api/goods/detail',
method: 'GET',
params: {
brand_id: this.$route.params.id
}
})
.then((res) => {
// doSomething
})
ここでの要求url
/api/goods/detail
、対応する真の要求アドレスはhttp://127.0.0.1:8889/api/goods/detail
である.Proxyの公式サイトのドキュメント:https://vuejs-templates.github.io/webpack/proxy.html