2017-06-21 61 views
0

我一直工作在一個登錄的NodeJS /註冊,似乎在終端做工精細腳本(稱爲LoginRegister.js)。我還安裝了NodeJS和它的bcrypt模塊。這裏的文件:HTML的NodeJS:「要求」未定義

// Initialization 
var fs = require("fs"); 
var bcrypt = require("bcrypt"); 
var LUinputID = $("#LUsernameIn").value; 
var LPinputID = $("#LPasswordIn").value; 
var RUinputID = $("#RUsernameIn").value; 
var RPinputID = $("#RPasswordIn").value; 

var UserStorageTextFile = "Users.txt"; 

$(document).ready(function(){ 
    console.log("Hello"); 
    var RButton = $("rBTN").addEventListener("click", registerUser(UserStorageTextFile, RUinputID, RPinputID)); 
    var LButton = $("#lBTN").addEventListener("click", registerUser(UserStorageTextFile, LUinputID, LPinputID)); 
}); 

// Defining Functions 
function encrypt(passwordFromUser) { 
    var salt = bcrypt.genSaltSync(10); 
    var hash = bcrypt.hashSync(passwordFromUser, salt); 
    return hash; 
} 

function passCheck(passwordFromUser, passHashed){ 
    return bcrypt.compareSync(passwordFromUser,passHashed); 
} 

function loginUser(usersTextFile, username, password){ 
    data = fs.readFileSync(usersTextFile).toString(); 

    if(data.indexOf(username) != -1){ 
     console.log(data.indexOf(username)); 
     for (var i = 0; i <= data.indexOf(username); i++) { 
      if (i == data.indexOf(username)) { 
       i += (username.length + 1); 
       passcode = data.slice(i, i+60); 

       if (passCheck(password, passcode)) { 
        console.log("Yes!!"); 
       } 
       else{ 
        console.log("No!!"); 
       } 
      } 
     } 
    } 
    else{ 
     console.log("No!!"); 
    } 
} 

function registerUser(usersTextFile, username, password) { 
    data = fs.readFileSync(usersTextFile); 
    saveData = data + username + "-" + encrypt(password) + "\n"; 

    fs.writeFile('Users.txt', saveData, (err2) => { 
     console.log("User " + username + " Registered!"); 
    }); 
} 

我想測試它在瀏覽器中,所以我放在一起的HTML文件中的行動,以顯示我的JS之一:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Authentication Test</title> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script type="text/javascript" src="LoginRegister.js"></script> 
</head> 

<h2>Login</h2> 
<input type="text" id="RUsernameIn"> 
<input type="password" id="RPasswordIn"> 
<button id="lBTN">Login</button> 

<h2>Register</h2> 
<input type="text" id="LUsernameIn"> 
<input type="password" id="LPasswordIn"> 
<button id="rBTN">Register</button> 

</html> 

我在微軟開闢了HTML文件邊緣和試圖按下注冊按鈕後,將細節放入框中,但我檢查了Users.txt文件,並沒有發生任何事情。看F12開發人員工具後,我注意到,在啓動時,控制檯說:

SCRIPT5009: 'require' is undefined 
LoginRegister.js (2,1) 
+3

'require()'是node.js中的一個服務器端函數。您顯示的代碼正在瀏覽器中運行,而不是在node.js中運行。看起來您可能會對瀏覽器和node.js如何協同工作感到困惑。 node.js被用作您的Web服務器。瀏覽器從Web服務器請求特定的URL。您的node.js代碼接收到該請求,然後使用您在node.js中需要的任何代碼,爲該URL創建所需的HTML頁面,然後將其作爲對瀏覽器請求的響應發回。瀏覽器然後解析HTML並顯示頁面。該頁面中的任何腳本都在瀏覽器中運行。 – jfriend00

+1

這是此https://stackoverflow.com/questions/31931614/require-is-not-defined-node-js可能重複 – Jalil

+0

你有一個市長的誤解。節點是服務器端JS運行時。它不會在瀏覽器中運行。兩個Witten在JavaScript中,不同的運行時環境。要在瀏覽器環境中使用節點代碼和節點語法,請檢查webpack。 – fsaint

回答

0

的node.js是一個服務器端的技術,而不是瀏覽器技術。因此,特定於節點的調用(如require())在瀏覽器中不起作用。

browserifywebpack如果你想從節點服務於特定瀏覽器的模塊。

查看更多:require is not defined? node.js 感謝羅布Raisch。