Node.js 如何构建记事应用

Node.js 如何构建记事应用

在这篇文章中,我们将创建一个记事应用。记事应用基本上用于将信息或笔记存储在数据库中,以防丢失,就像Google Keep一样。

功能: 用户可以使用这个记事应用完成以下操作:

  • 显示所有笔记
  • 添加新笔记
  • 删除笔记
  • 更新笔记

方法: 我们将使用Body Parser来从表单中捕获用户输入的值,例如笔记内容和笔记ID,并将它们存储在集合中。然后,我们将使用EJS将笔记发送到网页。EJS是一种中间件,可以轻松地将数据从服务器文件(app.js或server.js)发送到网页。我们还将创建用于删除笔记的删除路由和用于更新笔记的更新路由。

实现: 下面是上述方法的逐步实现。

步骤1:项目设置

初始化NPM: 在终端中创建和定位项目文件夹,然后输入以下命令:

npm init -y

它初始化我们的Node应用程序并生成一个package.json文件。

安装依赖项: 在终端中找到您的根项目目录,并输入以下命令:

npm install express ejs body-parser

要在项目中安装Express,EJS和Body Parser作为依赖项

创建服务器文件: 创建一个’app.js’文件,内部请求Express模块,并创建一个常量’app’用于创建express模块的实例,然后将EJS设置为默认的视图引擎。

const express = require('express');

const app = express();
app.set('view engine', 'ejs');

重新安排您的目录: 需要使用“.ejs”作为HTML文件的扩展名,以便在其中使用EJS。然后,您必须将视图目录内的每个“.ejs”文件移动到根目录中。EJS默认会在视图文件夹内查找“.ejs”文件。

使用EJS变量: 在更新后的.ejs文件中,您需要使用EJS变量来接收来自服务器文件的值。您可以像这样在EJS中声明变量

<%= variableName %>
<!DOCTYPE html> 
<html> 
  
<head> 
    <title>Page Title</title> 
</head> 
  
<body> 
    <%= variableName %> 
</body> 
  
</html>

向变量发送数据:在您的服务器文件(app.js或index.js)中,您可以使用render方法发送一个EJS文件以及一些数据。

app.get("/", (req, res) => {
    res.render("home", 
        { variableName: "Hello Geeks!" })
})
const express = require('express') 
const app = express() 
app.set('view engine', 'ejs') 
  
app.get("/", (req, res) => { 
    res.render("home", { variableName: "Hello Geeks!" }) 
}) 
  
app.listen(3000, (req, res) => { 
    console.log("App is running on port 3000") 
})

从表单获取数据到app.js: 要接收表单的输入值,我们必须使用一个名为body-parser的node包。

安装body-parser:

npm install body-parser

需要body-parser模块:

const bodyParser = require('body-parser')

然后:

app.use( bodyParser.json() );      
app.use(bodyParser.urlencoded({    
  extended: true
}));

然后我们可以使用请求对象处理表单数据。

步骤2:获取笔记: 我们有一个包含两个属性content和id的笔记数组。

const notes = [{
       noteId: 1,
       noteContent: "Hey, Geeks you can add your important notes here."
   }
]

让我们将数组发送到我们的网页。在之前的步骤中,我们只是把一个值发送到变量,现在我们要发送完整的数组。

app.get("/", function (req, res) {
   res.render("home", {
       data: notes
   })
})

由于在我们的数组中有很多元素(注释)是常见的,并且我们必须打印每一个元素,所以我们必须使用ForEach循环来遍历我们集合中的每一个元素,并在更新表单的文本区域字段中显示详细信息。我们将在更新表单的文本区域中显示详细信息,这样我们可以展示注释,同时也可以用它来更新注释。

<form action="/update" method="post">
    <input type="number" style="display: none;" 
            name="noteId" value="<%= element.noteId %>">
    <textarea type="text" rows="6" cols="30" 
            placeholder="Type Here..." name="noteContent"
        value="<%= element.noteContent %>">
            <%= element.noteContent %></textarea>
    <br>
    <button type="submit">Update</button>
</form>

步骤3:更新笔记: 现在,让我们看看如何在服务器文件(app.js)的更新路由中处理此更新表单。

app.post('/update', (req, res) => {
   var noteId = req.body.noteId;
   var noteContent = req.body.noteContent;

   notes.forEach(note => {
       if (note.noteId == noteId) {
           note.noteContent = noteContent;
       }
   })
   res.render("home", {
       data: notes
   })
})

对于更新笔记,我们必须创建一个更新的路由,我们将在其中获取请求的笔记ID并搜索具有相同笔记ID的元素,并将元素内容属性更改为来自更新表单的“noteContent”。

步骤4:删除笔记: 更新网页提供删除选项:我们必须创建一个表单,将要删除的笔记ID发送到服务器文件“app.js”。

<form action="/delete" method="post">
     <input type="number" style="display: none;" 
         name="noteId" value="<%= element.noteId %>">
     <button type="submit" 
         style="margin: 0px 4px;">✕</button>
</form>

要删除一个注释,我们需要创建一个删除路由,在该路由中我们将获取请求的注释id,并查找具有相同注释id的元素,并删除该元素。

app.post('/delete', (req, res) => {
   var noteId = req.body.noteId;
   var j = 0;
   notes.forEach(note => {
       j = j + 1;
       if (note.noteId == noteId) {
           notes.splice((j - 1), 1)
       }
   })
   res.render("home", {
       data: notes
   })
})

完整代码: 以下是使用Node.js构建笔记应用的完整代码:

app.js

const express = require('express') 
const bodyParser = require('body-parser') 
const notes = [{ 
        noteId: 1, 
        noteContent: "Hey, Geeks you can add your important notes here."
    } 
] 
  
const app = express() 
  
app.set('view engine', 'ejs') 
  
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true
})) 
  
app.get("/", function (req, res) { 
    res.render("home", { 
        data: notes 
    }) 
}) 
  
app.post("/", (req, res) => { 
    const noteContent = req.body.noteContent 
    const noteId = notes.length + 1; 
  
    notes.push({ 
        noteId: noteId, 
        noteContent: noteContent 
    }) 
  
    res.render("home", { 
        data: notes 
    }) 
}) 
  
app.post('/update', (req, res) => { 
    var noteId = req.body.noteId; 
    var noteContent = req.body.noteContent; 
      
    notes.forEach(note => { 
        if (note.noteId == noteId) { 
            note.noteContent = noteContent; 
        } 
    }) 
    res.render("home", { 
        data: notes 
    }) 
}) 
  
app.post('/delete', (req, res) => { 
    var noteId = req.body.noteId; 
  
    var j = 0; 
    notes.forEach(note => { 
        j = j + 1; 
        if (note.noteId == noteId) { 
            notes.splice((j - 1), 1) 
        } 
    }) 
  
    res.render("home", { 
        data: notes 
    }) 
}) 
  
app.listen(3000, (req, res) => { 
    console.log("App is running on port 3000") 
})

home.ejs

<!DOCTYPE html> 
<html> 
  
<head> 
    <title>Note Keeper</title> 
</head> 
  
<body> 
    <h1>Note Keeper</h1> 
  
    <div style="display: flex;"> 
  
        <% data.forEach(element=> { %> 
  
            <form action="/update" method="post"> 
                <input type="number" style="display: none;" 
                       name="noteId" value="<%= element.noteId %>"> 
                <textarea type="text" rows="6" cols="30" 
                          placeholder="Type Here..." name="noteContent"
                    value="<%= element.noteContent %>"> 
                      <%= element.noteContent %></textarea> 
                <br> 
                <button type="submit">Update</button> 
            </form> 
  
            <form action="/delete" method="post"> 
                <input type="number" style="display: none;" 
                       name="noteId" value="<%= element.noteId %>"> 
                <button type="submit" 
                        style="margin: 0px 4px;">✕</button> 
            </form> 
            <% }) %> 
    </div> 
  
    <h1>Add Note</h1> 
    <form action="/" method="post"> 
        <input type="number" style="display: none;" 
               name="noteId"> 
        <textarea type="text" rows="6" cols="30" 
                  placeholder="Type Here..." 
                  name="noteContent"></textarea> 
        <br> 
        <button type="submit">Add</button> 
    </form> 
</body> 
  
</html>

输出:

Node.js 如何构建记事应用

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程