Node.js 是一个开源、跨平台的 JavaScript 运行时环境,它允许开发者在浏览器之外构建服务器端应用程序。
它可用于构建性能甚佳的关键任务与生产型应用程序。在本篇实用教程与指南中,我们将给大家介绍如何使用 Node.js 创建 Web 服务器。
使用 Node.js 实现简单的 Web 服务器。介绍如何使用 Node.js 设置和部署 Web 服务器。它逐步讲解了每个步骤,包括项目初始化、Express.js 集成和许多基本功能,为任何 Node.js 新手提供了坚实的基础。
构建动态 Web 应用程序。涵盖了广泛的功能,例如处理表单、响应用户请求和动态提供网页,这些功能对于使您的 Web 应用程序具有交互性和吸引力至关重要。
探索 Node.js 功能。深入了解 Node.js 的 Web 开发功能,包括如何处理静态文件、处理错误和实现表单提交。本指南提供了使用 Node.js 构建功能丰富的 Web 应用程序的实用方法。
node -v
npm -v
mkdir book-clubcd book-club
npm init -y
此命令package.json将为你的项目创建一个文件。它将包含有关项目的元数据,包括其依赖项:
{
"name": "book-club",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": { "test":
"echo \"Error: no test specified\" && exit 1" },
"keywords": [],
"author": "",
"license": "ISC"
}
npm install express
const express = require('express');
const app = express();
该express()函数是 Express 模块导出的顶级函数。它创建一个 Express 应用程序,我们将其分配给变量app。
app.get('/', (req, res) => {
res.send('Hello World!');
});
这里,app.get()是一个函数,它告诉服务器在对特定路径(在本例中为/)发出 GET 请求时该做什么。此函数接受两个参数:路径和接受请求和响应的回调函数。
const port = 3000;
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
该app.listen()函数启动服务器并使其监听指定端口上的请求。
module.exports = {
home: 'Welcome to our Book Club!',
about: 'About Us',
notFound: '404 Not Found'
};
const messages = require('./messages');
现在,在路由中可使用这些消息:
app.get('/', (req, res) => {
res.send(messages.home);
});
app.get('/about', (req, res) => {
res.send(messages.about);
});
app.use((req, res) => {
res.status(404).send(messages.notFound);
});
这里,app.use()是每次向服务器发出请求时都会调用的方法。我们在这里使用它来处理所有未定义的路由,并发送消息404 Not Found。
mkdir public
为了达到本篇文章的目的,让我们添加一个简单的 HTML 文件和一个 CSS 文件。
在public目录中,创建一个名为的新文件index.html并添加以下代码:
Book Club
Welcome to our Book Club!>/h1>
另外,在public目录中创建一个名为styles.css的新文件,并添加以下代码:
body {
font-family: Arial, sans-serif;
}
app.js在路由定义之前将以下行添加到文件中:
app.use(express.static('public'));
其中,express.static函数是 Express.js 中的内置中间件函数。它提供静态文件,并将要提供文件的目录名称作为了参数。
此表单将向路径/submit发送 POST 请求。请求正文将包含输入字段的值。
npm install body-parser
步骤 3:导入并使用 body-parser
下面,将 body-parser 导入到app.js文件中:
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
该bodyParser.urlencoded()函数将解析属性下可用的传入请求主体req.body。
app.post('/submit', (req, res) => {
const book = req.body.book;
console.log(`Book submitted: ${book}`);
res.send(`Book submitted: ${book}`);
});
const books = [];
app.post('/submit', (req, res) => { const book = req.body.book;
books.push(book);
console.log(`Book submitted: ${book}`);
res.send(`Book submitted: ${book}`);
});
app.get('/books', (req, res) => {
res.send(books.join(', '));
});
注意:在实际应用中,你应该会将数据存储在数据库中。在本篇文章中,当每次重新启动服务器时,数组中的数据都会丢失。
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something Went Wrong!');
});
此中间件函数有4个参数,而不是平常的3个(req、res、next)。此时只要应用程序出现错误,就会调用此函数。
app.post('/submit', (req, res, next) => {
const book = req.body.book;
if (!book) {
const err = new Error('Book title is required');
return next(err);
}
books.push(book);
console.log(`Book submitted: ${book}`);
res.send(`Book submitted: ${book}`);
});
此处理程序检查 POST 请求中是否提供了书名。如果没有,它会创建一个新Error对象并将其传递给next函数。这将跳过所有后续中间件函数并直接转到中间件进行错误处理。
npm install ejs
app.set('view engine', 'ejs');
这告诉 Express 在渲染视图时使用 EJS 作为视图引擎。
mkdir views
Book Club
<%= message %>
Submitted Books:
<% books.forEach(function(book) { %>
- <%= book %>
<% }); %>
占位<%= message %>标签将用于输出消息变量的值。
app.post('/submit', (req, res) => { const book = req.body.book;
books.push(book);
console.log(`Book submitted: ${book}`);
res.redirect('/');
});
注意:在 POST 请求后重定向用户是一种非常好的做法。这称为Post/Redirect/Get 模式,它可以有效防止重复提交表单。
app.get('/', (req, res) => {
res.render('index', { message: messages.home, books: books });
});
node app.js
Server is running at http://localhost:3000
你应该会在终端中看到这样一条消息。
或者,你也可以通过向package.json文件中添加脚本来简化启动过程:
现在无需运行node app.js,而是可以直接调用npm start:
npm start
作者:万能的大雄
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。