Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

node

1
2
3
4
5
6
7
8
9
10
const express = require("express");
const app = express();

app.get("/", (req, res) => {
res.send("Hello World!");
});

app.listen(3000, () => {
console.log("示例应用正在监听 3000 端口 !");
});

导入和创建模块

1
2
const express = require("express");
const app = express();

这里介绍一下自建模块的方法

square.js

1
2
3
4
5
6
exports.area = (width) => {
return width * width;
};
exports.perimeter = (width) => {
return 4 * width;
};

main.js

1
2
const square = require("./square");//模块路径
console.log("边长为" + square.area(4));

Node 是一个单线程事件驱动的执行环境。“单线程”意味着对服务器的所有请求运行在同一个线程上,而不是分布在不同的进程上,这里我们就需要用到另一个操作异步API

我们常见的代码如下,其执行顺序以文本顺序进行打印

570

当我们以异步API的方式进行执行时

571

其输出就根据逻辑顺序进行打印,而这种打印就需要用到异步API,也就是说异步API其实是一个多线程操作

路由定义

路由处理器基本格式

1
2
3
app.get("/", (req, res) => {
res.send("Hello World!");
})

get作为一个处理器,处理传入的请求

其他处理器

checkout(), copy(), delete(), get(), head(), lock(), merge(), mkactivity(), mkcol(), move(), m-search(), notify(), options(), patch(), post(), purge(), put(), report(), search(), subscribe(), trace(), unlock(), unsubscribe().

中间件跟处理器有着类似的作用,中间件函数通常是对请求或响应执行某些操作,然后调用“栈”里的下一个函数,可能是其他中间件或路由处理器

1
2
3
4
const a_middleware_function = (req, res, next) => {
// ... 进行一些操作
next(); // 调用 next() ,Express 将调用处理链中下一个中间件函数。
};

中间件函数和路由处理回调之间的唯一区别是:中间件函数有第三个参数 next,在中间件不会结束请求周期时应调用这个 next(它包含中间件函数调用后应调用的下一个函数),但不同的是中间件需要提前导入,处理器不需要

托管静态文件

1
app.use(url,express.static("public"));

即可通过url访问指定路径下的文件

错误处理

处理错误的特殊中间件函数有四个参数(err, req, res, next),而不是之前的三个

1
2
3
4
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send("出错了!");
});

评论