1. 程式人生 > >nodejs漸入佳境[30]-mongodb+express+middleware繫結使用者許可權

nodejs漸入佳境[30]-mongodb+express+middleware繫結使用者許可權

修改todos模型

增加_creator,將使用者繫結起來

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//模版
var Todo = mongoose.model('Todo',{
   text:{
     type:String,  //型別
     required:true, //必須要有
     minlength:1, //最小長度
     trim:true   //去除空格
   },

   completed:{
     type:Boolean,
     default:false  //預設值
   },
   completedAt:{
     type:Number,
     default:null
   },
   _creator: {
     type: mongoose.Schema.Types.ObjectId,

     required: true
   }
});

新增許可權控制

新增許可權控制並且儲存了使用者的id。
使用者訪問/todos 必須要有authenticate這個middleware。通過以後,說明使用者是可信的。就可以儲存todo到資料庫中。並且將todo與建立的使用者連結在了一起

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//express route
app.post('/todos',authenticate,(req,res)=>{

//  console.log(req.body);

   //建立物件document
   var todo = new Todo({
       text:req.body.text,
       _creator:req.user._id
   });
   //儲存
     todo.save().then((doc)=>{
     res.send(doc);
   },(e)=>{
       res.status(400).send(e);
   });

})
//獲取所有屬性

app.get('/todos', authenticate,(req, res) => {
 Todo.find({
     _creator:req.user._id
 }).then((todos) => {
   res.send({todos});
 }, (e) => {
   res.status(400).send(e);
 })
});

完整程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
var mongoose = require('mongoose');
var express = require('express');
var bodyParser = require('body-parser');
const {ObjectID} = require('mongodb');
var _ = require('lodash');

const validator = require('validator');


const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
//app
var app = express();
const port = process.env.PORT || 3000;
//express middleware  Jonson物件與字串轉換。
app.use(bodyParser.json());

//
mongoose.Promise = global.Promise;
//連線mogodb
mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/TodoApp');

//模版
var Todo = mongoose.model('Todo',{
   text:{
     type:String,  //型別
     required:true, //必須要有
     minlength:1, //最小長度
     trim:true   //去除空格
   },
   completed:{
     type:Boolean,
     default:false  //預設值
   },
   completedAt:{
     type:Number,
     default:null
   },
   _creator: {
     type: mongoose.Schema.Types.ObjectId,
     required: true
   }
});





var UserSchema = new mongoose.Schema({
 email: {
   type: String,
   required: true,
   trim: true,
   minlength: 1,
   unique: true,
   validate: {
     validator: validator.isEmail,
     message: '{VALUE} is not a valid email'
   }
 },
 password: {
   type: String,
   require: true,
   minlength: 6

相關推薦

nodejs漸入佳境[30]-mongodb+express+middleware使用者許可權

修改todos模型 增加_creator,將使用者繫結起來 123456789101112131415161718192021 //模版var Todo = mongoose.model('Todo',{    text:{    

nodejs漸入佳境[31]-mongodb+express+middleware使用者許可權2

繼續繫結使用者許可權,要執行操作必須要有token 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616

nodejs漸入佳境[28]-mongodb+express+middleware驗證使用者登陸資訊

登陸驗證 使用者使用郵箱和密碼登陸,與mongodb資料庫查詢 驗證使用者是否有效首先使用者存在,並且密碼匹配。 1234567891011121314151617181920 UserSchema.statics.findByCredentials = functio

nodejs漸入佳境[29]-mongodb+express+middleware刪除使用者許可權

刪除使用者的token 12345678910 UserSchema.methods.removeToken = function (token) {  var user = this;  return user.update({   &nb

nodejs漸入佳境[32]-mongodb+express+auth middleware部署到h

package.json 123456789101112131415161718192021222324252627282930313233 {  "name": "node-todo-api",  "version": "1.0.0",  

nodejs漸入佳境[18]-mongodb-node增刪查改

1 > npm install --save mongodb 12345678910111213141516171819202122232425 //mongodb 3以上寫法const MongoClient =

nodejs漸入佳境[17]-mongodb資料庫入門

下載mongodb https://www.mongodb.com mongod 解壓,進入bin目錄 12 //-dbpath代表資料放置在哪裡./mongod -dbpath /Users/jackson/Downloads/mongodb-data

nodejs漸入佳境[16]-node express專案部署到heroku

原始檔 views/partials/footer.hbs: 123 <Header>    <footer>{{pageTitle}}</footer><Header> views

nodejs漸入佳境[27]-express+mongodb+middleware實現密碼雜湊

儲存密碼前對密碼進行hash 123456789101112131415 UserSchema.pre('save', function (next) {  var user = this;  if (user.isModified('password

Nodejs學習筆記 day03----事件

事件驅動程式: 當web server接收到請求,就把它關閉然後進行處理,然後去服務下一個web請求。 當這個請求完成,它被放回處理佇列,當到達佇列開頭,這個結果被返回給使用者。        webserver一直接受請求而不需要等

nodejs漸入佳境[15]-express框架

最簡單的伺服器 12345678910111213141516171819202122 const express = require('express');var app = express();//返回html格式app.get('/',(req,res)=>{

Nodejs域名與Nginx反向代理

開啟conf目錄裡的nginx.conf 檔案 –> 新增一段upstream upstream nodejs{ server 127.0.0.1:3000;//你的Express專案埠# server 127.0.0.1:3001;

Developer Express 之 XtraReport如何動態資料

XtraReport報表編輯器裡的儲存,是可以儲存為一個檔案的,所以它應該提供了一個從檔案載入的方法,這時我們可以發現XtraReport裡有一個LoadLayout的方法,可以載入報表檔案,它的過載方法是可以從IO.Stream里加載報表檔案,也就是說,我們可以進一步的把這

Nodejs腳手架搭建基於express的應用

gen str 記錄 orm sta epo port XP strong 原文鏈接:https://www.cnblogs.com/FE-yanyi1993/p/6413042.html 這篇寫的非常詳細,此處只做記錄。 1.安裝生成器 $ npm install

[轉] Nodejs 進階:Express 常用中間件 body-parser 實現解析

tree define pan iconv 不同 erro unzip body message 寫在前面 body-parser是非常常用的一個express中間件,作用是對post請求的請求體進行解析。使用非常簡單,以下兩行代碼已經覆蓋了大部分的使用場景。 app.

c++之多型性(動態)

多型性 指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。C++支援兩種多型性:編譯時多型性,執行時多型性。   a、編譯時多型性:通過過載函式實現    b、執行時多型性:通過虛擬函式實現  多型性可以簡單地概括為“一

vue基礎4-資料

    1、v-bind 只能實現資料額單向繫結,從M到V,無法實現資料的雙向繫結       改變頁面輸入框的值,列印資料並未改變。      2、v-model 可以實現資料的雙向繫結,從M到V、V到M。 &nbs

雙向原理

雙向繫結原理 <input type="text" oninput="evtInput()" id="input"/> <p id="text"></p> // 1、定義物件vue,其中有個屬性:name let vue = { name:

[備忘]Nginx 禁止IP訪問及未的域名跳轉

轉載自: http://www.linuxidc.com/Linux/2011-04/34368.htm 今天要在Nginx上設定禁止通過IP訪問伺服器,只能通過域名訪問,這樣做是為了避免別人把未備案的域名解析到自己的伺服器IP而導致伺服器被斷網,從網路上搜到以下解決方案: Ngin

java 的前期和後期

           java的前期繫結在程式執行前根據編譯時型別繫結,呼叫開銷較小,如C語言只有前期繫結這種方法呼叫 後期繫結,是指在執行時根據物件的型別進行繫結,又叫動態繫結或