跳到主要内容

3 篇博文 含有标签「express」

查看所有标签

在 Express 中实现断点续传

· 阅读需 1 分钟
1adybug
子虚伊人
import { createReadStream } from "fs"
import { stat } from "fs/promises"

import express from "express"

const app = express()

app.get("/video", async (request, response) => {
const filename = "demo.mp4"
const { size } = await stat(filename)
response.setHeader("Content-Type", "video/mp4")
const range = request.headers.range

if (!range) {
response.setHeader("Content-Length", size)
response.status(200)
createReadStream(filename).pipe(response)
return
}

const parts = range.replace(/bytes=/, "").split("-")
const start = parseInt(parts[0])
const end = parts[1] ? parseInt(parts[1]) : size - 1
const chunksize = end - start + 1
response.setHeader("Content-Range", `bytes ${start}-${end}/${size}`)
response.setHeader("Accept-Ranges", "bytes")
response.setHeader("Content-Length", chunksize)
response.status(206)
createReadStream(filename, { start, end }).pipe(response)
})

app.listen(4567)

在开发环境中使用 https

· 阅读需 1 分钟
1adybug
子虚伊人

现在很多环境下的网络请求要求必须是 https 请求,但是在开发或者内网环境下,无法使用 CA 机构颁发的证书,这时候可以使用 OpenSSL 提供的自签证书功能:

安装

在 windows 系统下,可以使用 winget 来安装第三方分发版本:

winget search openssl
# 选择一个版本较新的分发版本
winget install FireDaemon.OpenSSL

重启终端

生成证书

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout your-key.pem -out your-cert.pem

使用

import { readFileSync } from "fs"
import { createServer } from "https"

import express from "express"

const app = express()

const server = createServer(
{
key: readFileSync("your-key.pem"),
cert: readFileSync("your-cert.pem"),
},
app,
)

server.listen(3000)

在 Node.js 中使用 fetch 请求接口可能会报错:

TypeError: fetch failed
at Object.fetch (node:internal/deps/undici/undici:11730:11)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
cause: Error: self-signed certificate
at TLSSocket.onConnectSecure (node:_tls_wrap:1674:34)
at TLSSocket.emit (node:events:514:28)
at TLSSocket._finishInit (node:_tls_wrap:1085:8)
at ssl.onhandshakedone (node:_tls_wrap:871:12) {
code: 'DEPTH_ZERO_SELF_SIGNED_CERT'
}
}

指定环境变量 NODE_TLS_REJECT_UNAUTHORIZED='0' 即可

npx cross-env NODE_TLS_REJECT_UNAUTHORIZED='0' node index.js

在 Express 中使用 https 证书

· 阅读需 1 分钟
1adybug
子虚伊人
import { readFileSync } from "fs"
import https from "https"

import express from "express"

const app = express()

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

https
.createServer(
{
key: readFileSync("../root/.acme.sh/a.deep-sea.dynv6.net_ecc/a.deep-sea.dynv6.net.key"),
cert: readFileSync("../root/.acme.sh/a.deep-sea.dynv6.net_ecc/fullchain.cer"),
},
app,
)
.listen(8080)