chore(i18n,curriculum): processed translations (#42478)
This commit is contained in:
@@ -9,7 +9,7 @@ dashedName: comparison-with-the-inequality-operator
|
||||
|
||||
# --description--
|
||||
|
||||
不相等運算符(`!=`)與相等運算符是相反的。 這意味着嚴格不相等並返回 `false` 的地方,用嚴格相等運算符會返回 `true`,*反之亦然*。 與相等運算符類似,不相等運算符在比較的時候也會轉換值的數據類型。
|
||||
不相等運算符(`!=`)與相等運算符是相反的。 這意味着不相等並返回 `false` 的地方,用相等運算符會返回 `true`,*反之亦然*。 與相等運算符類似,不相等運算符在比較的時候也會轉換值的數據類型。
|
||||
|
||||
**例如**
|
||||
|
||||
|
@@ -26,7 +26,7 @@ dashedName: comparison-with-the-strict-equality-operator
|
||||
|
||||
# --instructions--
|
||||
|
||||
在 `if` 語句中,添加不相等運算符,這樣函數在當 `val` 嚴格等於 `7` 的時候,會返回 `Equal`。
|
||||
在 `if` 語句中,添加嚴格相等運算符,這樣函數在當 `val` 嚴格等於 `7` 的時候,會返回 `Equal`。
|
||||
|
||||
# --hints--
|
||||
|
||||
|
@@ -9,7 +9,7 @@ dashedName: comparisons-with-the-logical-and-operator
|
||||
|
||||
# --description--
|
||||
|
||||
有時你需要在一次判斷中做多個操作。 當且僅當<dfn>運算符</dfn>的左邊和右邊都是 true,<dfn>邏輯與</dfn>運算符(`&&`)纔會返回`true`。
|
||||
有時你需要在一次判斷中做多個操作。 當且僅當<dfn>運算符</dfn>的左邊和右邊都是 true,<dfn>邏輯與</dfn>運算符(`&&`)纔會返回 `true`。
|
||||
|
||||
同樣的效果可以通過 if 語句的嵌套來實現:
|
||||
|
||||
@@ -33,7 +33,7 @@ return "No";
|
||||
|
||||
# --instructions--
|
||||
|
||||
請使用 `&&` 運算符把兩個 if 語句合併爲一個 if 語句,如果 `val` 小於或等於`50` 並且大於或等於 `25` 時,返回 `Yes`。 否則,將返回`No`。
|
||||
請使用 `&&` 運算符把兩個 if 語句合併爲一個 if 語句,如果 `val` 小於或等於 `50` 並且大於或等於 `25` 時,返回 `Yes`。 否則,將返回 `No`。
|
||||
|
||||
# --hints--
|
||||
|
||||
|
@@ -24,7 +24,7 @@ ourStr += "I come second.";
|
||||
|
||||
# --instructions--
|
||||
|
||||
使用 `+=` 操作符,多行合併字符串 `This is the first sentence.` 和 `This is the second sentence.` ,並賦值給 `myStr` 。 像編輯器裏顯示的那樣使用 `+=` 操作符。 先把第一個字符串賦值給 `myStr`,然後拼接第二個字符串。
|
||||
使用 `+=` 操作符,多行合併字符串 `This is the first sentence.` 和 `This is the second sentence.` ,並賦值給 `myStr` 。 像示例那樣使用 `+=` 操作符。 先把第一個字符串賦值給 `myStr`,然後拼接第二個字符串。
|
||||
|
||||
# --hints--
|
||||
|
||||
|
@@ -9,7 +9,7 @@ dashedName: global-vs--local-scope-in-functions
|
||||
|
||||
# --description--
|
||||
|
||||
一個程序中有可能具有相同名稱的<dfn>局部</dfn>變量 和<dfn>全局</dfn>變量。 在這種情況下,`local` 變量將會優先於`global`變量。
|
||||
一個程序中有可能具有相同名稱的<dfn>局部</dfn>變量 和<dfn>全局</dfn>變量。 在這種情況下,局部變量將會優先於全局變量。
|
||||
|
||||
下面爲例:
|
||||
|
||||
@@ -21,7 +21,7 @@ function myFun() {
|
||||
}
|
||||
```
|
||||
|
||||
函數 `myFun` 將會返回 `Head`,因爲 `local` 變量優先級更高。
|
||||
函數 `myFun` 將會返回字符串 `Head`,因爲局部變量的優先級更高。
|
||||
|
||||
# --instructions--
|
||||
|
||||
|
@@ -19,23 +19,23 @@ var sandwich = ["peanut butter", "jelly", "bread"]
|
||||
|
||||
# --instructions--
|
||||
|
||||
創建一個包含字符串(`string`)和數字( `number`)(按照字符串數字的順序)的數組 `myArray`。
|
||||
創建一個包含字符串和數字(按照字符串和數字的順序)的數組 `myArray`。
|
||||
|
||||
# --hints--
|
||||
|
||||
`myArray` 應該是一個數組(`array`)。
|
||||
`myArray` 應爲數組。
|
||||
|
||||
```js
|
||||
assert(typeof myArray == 'object');
|
||||
```
|
||||
|
||||
`myArray` 數組的第一個元素應該是一個字符串(`string`)。
|
||||
`myArray` 數組的第一個元素應該是一個字符串。
|
||||
|
||||
```js
|
||||
assert(typeof myArray[0] !== 'undefined' && typeof myArray[0] == 'string');
|
||||
```
|
||||
|
||||
`myArray` 數組的第二個元素應該是一個數字(`number`)。
|
||||
`myArray` 數組的第二個元素應該是一個數字。
|
||||
|
||||
```js
|
||||
assert(typeof myArray[1] !== 'undefined' && typeof myArray[1] == 'number');
|
||||
|
@@ -11,7 +11,7 @@ dashedName: understanding-boolean-values
|
||||
|
||||
另一種數據類型是布爾(<dfn>Boolean</dfn>)。 布爾值只能是兩個值中的一個:`true` 或者 `false`。 它非常像電路開關,`true` 是 “開”,`false` 是 “關”。 這兩種狀態是互斥的。
|
||||
|
||||
**注意:**布爾值是不帶引號的。 字符串 `"true"` 和 `"false"` 不是布爾值,在 JavaScript 中也沒有特殊含義。
|
||||
**注意:** 布爾值是不帶引號的。 字符串 `"true"` 和 `"false"` 不是布爾值,在 JavaScript 中也沒有特殊含義。
|
||||
|
||||
# --instructions--
|
||||
|
||||
|
@@ -11,16 +11,16 @@ dashedName: use-bracket-notation-to-find-the-last-character-in-a-string
|
||||
|
||||
要獲取字符串的最後一個字符,可以用字符串的長度減 1 的索引值。
|
||||
|
||||
例如,在 `var firstName = "Charles"` 中,可以用 `firstName[firstName.length - 1]` 來得到字符串的最後的一個字符。
|
||||
例如,如果 `var firstName = "Ada"` 中,那麼你可以通過 `firstName[firstName.length - 1]` 來得到字符串的最後的一個字符。
|
||||
|
||||
示例:
|
||||
|
||||
```js
|
||||
var firstName = "Charles";
|
||||
var firstName = "Ada";
|
||||
var lastLetter = firstName[firstName.length - 1];
|
||||
```
|
||||
|
||||
`lastLetter` 值爲字符串 `s`。
|
||||
`lastLetter` 值爲字符串 `a`。
|
||||
|
||||
# --instructions--
|
||||
|
||||
|
@@ -11,16 +11,16 @@ dashedName: use-bracket-notation-to-find-the-nth-to-last-character-in-a-string
|
||||
|
||||
我們既可以獲取字符串的最後一個字符,也可以用獲取字符串的倒數第 N 個字符。
|
||||
|
||||
例如,你可以這樣 `firstName[firstName.length - 3]` 來獲得 `var firstName = "Charles"` 字符串中的倒數第三個字符。
|
||||
例如,你可以通過 `firstName[firstName.length - 3]` 來獲得 `var firstName = "Augusta"` 字符串中的倒數第三個字符。
|
||||
|
||||
例如:
|
||||
|
||||
```js
|
||||
var firstName = "Charles";
|
||||
var firstName = "Augusta";
|
||||
var thirdToLastLetter = firstName[firstName.length - 3];
|
||||
```
|
||||
|
||||
`thirdToLastLetter` 的值應該爲字符串 `l`。
|
||||
`thirdToLastLetter` 的值應該爲字符串 `s`。
|
||||
|
||||
# --instructions--
|
||||
|
||||
|
@@ -14,7 +14,7 @@ dashedName: add-inline-styles-in-react
|
||||
|
||||
# --instructions--
|
||||
|
||||
如果你有大量樣式,你可以將樣式 `object`(對象)分配給一個常量,以保持代碼的組織有序。 定義一個 `styles` 常量,並將其聲明爲具有三個樣式屬性及對應值的 `object`(對象)。 使 `div` 的文字顏色爲 `purple`、字號爲 `40`、邊框爲 `2px solid purple`。 然後設置 `style` 屬性,使其等於 `styles` 常量。
|
||||
如果你有大量樣式,你可以將樣式 `object`(對象)分配給一個常量,以保持代碼的組織有序。 在文件頂部將你的樣式聲明爲全局變量。 定義一個 `styles` 常量,並將其聲明爲具有三個樣式屬性及對應值的 `object`(對象)。 使 `div` 的文字顏色爲 `purple`、字號爲 `40`、邊框爲 `2px solid purple`。 然後設置 `style` 屬性,使其等於 `styles` 常量。
|
||||
|
||||
# --hints--
|
||||
|
||||
|
@@ -10,7 +10,7 @@ dashedName: authentication-strategies
|
||||
|
||||
策略是認證用戶的一種方式。 如果你讓用戶在註冊時填寫了用戶信息,那你就可以基於這些信息進行驗證。或者也可以引入第三方登錄,如 Google 或者 Github。 對於這個項目的驗證策略,我們會採用自己搭建的方式完成。 可以[點擊這裏](http://passportjs.org/)訪問 Passport 網站,查看數以百計的策略。
|
||||
|
||||
引入 `passport-local` 作爲依賴,然後將它添加到服務器,就像這樣:`const LocalStrategy = require('passport-local');`。
|
||||
引入 `passport-local@~1.0.0` 作爲依賴,然後將它添加到服務器,就像這樣:`const LocalStrategy = require('passport-local');`
|
||||
|
||||
然後,需要讓 passport **使用**一個實例化的 LocalStrategy 對象,這個對象的一些設置已完成。 請注意,接下來的所有代碼都應寫在連接數據庫的回調中,因爲它們的執行都依賴數據庫。
|
||||
|
||||
|
@@ -10,7 +10,7 @@ dashedName: authentication-with-socket-io
|
||||
|
||||
目前,你還無法確定連接到服務器的用戶身份。 雖然 `req.user` 包含用戶信息,但這個只在用戶直接與服務器交互時產生。當用戶通過 web socket 與服務器連接時,由於不存在 `req` 對象,我們就無法獲取用戶數據。 解決這個問題的方法之一是通過讀取和解析請求中包含 passport session 的 cookie,然後反序列化,進而獲取用戶信息對象。 幸運的是,NPM 上有可以讓這個複雜的流程簡單化的庫。
|
||||
|
||||
添加 `passport.socketio`、`connect-mongo@~3.2.0`、`cookie-parser` 作爲依賴,把它們分別賦值給 `passportSocketIo`、`MongoStore`、`cookieParser`。 同時,我們需要從之前引入的 `express-session` 中開闢新的內存空間, 就像這樣:
|
||||
添加 `passport.socketio@~3.7.0`、`connect-mongo@~3.2.0`、`cookie-parser@~1.4.5` 作爲依賴,把它們分別賦值給 `passportSocketIo`、`MongoStore`、`cookieParser`。 同時,我們需要從之前引入的 `express-session` 中開闢新的內存空間, 就像這樣:
|
||||
|
||||
```js
|
||||
const MongoStore = require('connect-mongo')(session);
|
||||
|
@@ -10,7 +10,7 @@ dashedName: hashing-your-passwords
|
||||
|
||||
回過頭來看信息安全,你也許記得在數據庫中存儲明文密碼是*絕對*禁止的。 現在,我們需要引入 BCrypt 來解決這個問題。
|
||||
|
||||
添加 BCrypt 作爲依賴,並在服務端請求它。 你需要在兩個步驟中使用哈希運算:註冊和保存新賬戶,以及登錄時檢查密碼是否正確。
|
||||
添加 `bcrypt@~5.0.0` 作爲依賴,並在服務端使用它。 你需要在兩個步驟中使用哈希運算:註冊和保存新賬戶,以及登錄時檢查密碼是否正確。
|
||||
|
||||
目前處理註冊的路由中,我們是這樣把密碼添加到數據庫的:`password: req.body.password`。 保存哈希值的一個簡單方式是在數據庫邏輯中添加 `const hash = bcrypt.hashSync(req.body.password, 12);`,然後把 `req.body.password` 替換爲 `password: hash`。
|
||||
|
||||
|
@@ -8,7 +8,7 @@ dashedName: implementation-of-social-authentication-ii
|
||||
|
||||
# --description--
|
||||
|
||||
設置 GitHub 驗證的最後一步是創建策略本身。 爲此,你需要在項目中添加 “passport-github” 依賴,並在 `auth.js` 中 請求它,作爲 `GithubStrategy`,像這樣:`const GitHubStrategy = require('passport-github').Strategy;`。 別忘了請求和配置 `dotenv`,使用你的環境變量。
|
||||
設置 GitHub 驗證的最後一步是創建策略本身。 爲此,你需要在項目中添加 `passport-github@~1.1.0` 依賴,並在 `auth.js` 中請求它,作爲 `GithubStrategy`,像這樣:`const GitHubStrategy = require('passport-github').Strategy;`。 別忘了請求和配置 `dotenv`,使用你的環境變量。
|
||||
|
||||
爲了設置 GitHub 策略,我們需要在 Passport 中使用實例化的 `GitHubStrategy`,它可以接收兩個參數:一個對象(包括 `clientID`、`clientSecret` 和 `callbackURL`),以及一個回調函數。在這個回調函數中,我們要處理驗證成功時,判斷用戶是否已經在數據庫中存在的邏輯,以及在用戶數據庫對象中最初保存哪些字段。 這種處理方式適用於絕大部分第三方驗證策略,但有些策略會需要我們提供更多的信息,詳情請參考相關策略的 GitHub README。 例如,Google 的驗證策略會要求你提供一個 *scope*,用於標示用戶成功登錄後,你需要從返回的對象中獲取那些信息。以及,這也需要經過用戶同意,你纔可以獲取到。 你可以在[這裏](https://github.com/jaredhanson/passport-github/)瞭解當前我們使用的驗證策略的用法,不過我們也會在 freeCodeCamp 課程中進行詳細講解。
|
||||
|
||||
|
@@ -12,7 +12,7 @@ dashedName: serialization-of-a-user-object
|
||||
|
||||
我們需要用到序列化和反序列化的方法來進行配置。 passport 爲我們提供了 `passport.serializeUser( OURFUNCTION )` 和 `passport.deserializeUser( OURFUNCTION )` 兩個方法。
|
||||
|
||||
`serializeUser` 方法接收兩個參數,分別是表示用戶的對象和一個回調函數。 其中,回調函數的返回值應爲這個用戶的唯一標識符:最簡單的寫法就是讓它返回用戶的 `_id`。 這個屬性是 MongoDB 爲用戶創建的唯一字段。 類似地,`deserializeUser` 也接收兩個參數,分別是在序列化時生成的標識符以及一個回調函數。在回調函數裏,我們需要根據根據傳入的標識符(比如 \_id)返回表示用戶的對象。 爲了在 MongoDB 中通過 query(查詢語句)獲取 `_id` 字段,首先我們需要創建 `const ObjectID = require('mongodb').ObjectID;`;然後調用它:`new ObjectID(THE_ID)`。 當然,這一切的前提都是先引入 MongoDB 作爲依賴。 你可以在下面的例子中看到:
|
||||
`serializeUser` 方法接收兩個參數,分別是表示用戶的對象和一個回調函數。 其中,回調函數的返回值應爲這個用戶的唯一標識符:最簡單的寫法就是讓它返回用戶的 `_id`。 它應當是唯一的,是由 MongoDB 產生的。 類似地,`deserializeUser` 也接收兩個參數,分別是在序列化時生成的標識符以及一個回調函數。在回調函數裏,我們需要根據根據傳入的標識符(比如 \_id)返回表示用戶的對象。 爲了在 MongoDB 中通過 query(查詢語句)獲取 `_id` 字段,首先我們需要創建 `const ObjectID = require('mongodb').ObjectID;`;然後調用它:`new ObjectID(THE_ID)`。 確保添加 `mongodb@~3.6.0` 作爲依賴項。 你可以在下面的例子中看到:
|
||||
|
||||
```js
|
||||
passport.serializeUser((user, done) => {
|
||||
|
@@ -10,9 +10,9 @@ dashedName: set-up-passport
|
||||
|
||||
現在我們來創建 *Passport*,最終我們需要用它來實現用戶註冊和登錄。 除了 Passport,我們還會用 Express-session 來處理 session(會話)。 在客戶端,我們可以用這個中間件把 session id 儲存到 cookie。同時,我們可以在服務器上通過這個 id 訪問 session 數據。 通過這種方式,我們無需把用戶的個人賬號信息存到 cookie,來完成用戶的驗證。只需要用這個 id 作爲 *key* 來訪問服務器上用戶的數據即可。
|
||||
|
||||
爲了在你的項目中使用 Passport,首先你需要在 package.json 文件中添加依賴: `"passport": "^0.3.2"`。
|
||||
爲了在你的項目中使用 Passport,首先你需要在 package.json 文件中添加依賴: `passport@~0.4.1`
|
||||
|
||||
此外,還需要添加 Express-session 作爲依賴。 Express-session 有許多高級特性,但我們暫時只需要瞭解其基礎功能。 `"express-session": "^1.15.0"`
|
||||
此外,還需要添加 Express-session 作爲依賴。 Express-session 有許多高級特性,但我們暫時只需要瞭解其基礎功能。 `express-session@~1.17.1`
|
||||
|
||||
現在,我們需要配置 session 並初始化 Passport。 請先創建變量 “session” 和 “passport” 來分別引入 “express-session” 和 “passport”。
|
||||
|
||||
|
@@ -10,7 +10,7 @@ dashedName: set-up-the-environment
|
||||
|
||||
在接下來的挑戰中,我們將會用到 `chat.pug` 文件。 首先,在你的 `routes.js` 文件中爲 `/chat` 添加一個處理 GET 請求的路由,並給它傳入 `ensureAuthenticated`。在回調函數中,我們需要讓它渲染 `chat.pug` 文件,並在響應中包含 `{ user: req.user }` 信息。 現在,請修改 `/auth/github/callback` 路由,讓它可以像這樣設置 user_id:`req.session.user_id = req.user.id`,並在設置完成後重定向至 `/chat`。
|
||||
|
||||
我們還需要添加 `http` 和 `socket.io` 兩個依賴項,並且像這樣引入:
|
||||
添加 `socket.io@~2.3.0` 作爲依賴項,並且在你的服務器中和 `http` (內置在 Nodejs 中)一起導入/實例化。具體如下:
|
||||
|
||||
```javascript
|
||||
const http = require('http').createServer(app);
|
||||
|
Reference in New Issue
Block a user