转载

TypeScript 3 + Express + Node.js

第一步、安装需要的配置

首先,我们将使用node包管理器(npm)来为我们的应用程序安装依赖项。
Npm与Node.js一起安装。
如果您还没有安装Node.js,可以通过homebrew程序完成。

安装Homebrew并更新它:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew update
$ brew doctor

然后使用brew install命令安装node

brew install node

第二步、创建项目

接下来,让我们使用npm init命令创建一个新项目。

$ mkdir ts_node_blog
$ cd ts_node_blog
$ npm init

在回答提示后,您将在项目文件夹中有一个新的package.json文件。
我们也添加一些自定义脚本。

首先,添加开发脚本。
这将使用nodemon模块来监视对快速Web应用程序的源文件的任何更改。
如果文件更改,那么我们将重新启动服务器。
接下来,添加grunt脚本。
这只是调用grunt任务运行器。
我们将在本教程后面安装它。
最后,添加启动脚本。
这将使用node来执行bin/www文件。
如果您使用的是Linux或Mac,则package.json文件应如下所示:

{"name": "ts_node_blog","version": "1.0.0","description": "The blog of typescript + nodejs + express","main": "app.js","scripts": {"dev": "NODE_ENV=development nodemon ./bin/www","grunt": "grunt","start": "node ./bin/www","test": "echo \"Error: no test specified\" && exit 1"},"keywords": ["typescript","noejs","blog"],"author": "durban.zhang <durban.zhang@gmail.com>","license": "MIT"
}

如果您使用的是Windows,则package.json文件应如下所示:

{"name": "ts_node_blog","version": "1.0.0","description": "The blog of typescript + nodejs + express","main": "app.js","scripts": {"dev": "SET NODE_ENV=development nodemon ./bin/www","grunt": "grunt","start": "node ./bin/www","test": "echo \"Error: no test specified\" && exit 1"},"keywords": ["typescript","noejs","blog"],"author": "durban.zhang <durban.zhang@gmail.com>","license": "MIT"
}

请注意Windows用户对dev脚本的微小更改。

第三步、安装Express

下一步是安装Express依赖项。
我在我的npm install命令中包含了--save标志,以便将依赖项保存在package.json文件中。

$ npm install express --save
$ npm install @types/express --save-dev

请注意,这还会在项目中生成新的node_modules文件夹。
如果您使用Git,则应将此文件夹添加到.gitignore文件中。

第四步、启动脚本的配置

接下来我们需要创建我们的启动脚本。
如果您还记得,我们在package.json文件的scripts配置中指定了一个start属性。
我将其值设置为:"node ./bin/www"。
所以,让我们在:bin/www创建一个空文件

$ mkdir bin
$ cd bin
$ touch www

以下是www文件的完整内容:

#!/usr/bin/env node
"use strict";const server = require("../dist/server");
const debug = require("debug")("express:server");
const http = require("http");const httpPort = normalizePort(process.env.Port || 8080);
const app = server.Server.bootstrap().app;
app.set("port", httpPort);
const httpServer = http.createServer(app);httpServer.listen(httpPort);httpServer.on("error", onError);httpServer.on("listening", onListening);function normalizePort(val) {const port = parseInt(val, 10);if (isNaN(port)) {return val;}if (port >= 0) {return port;}return false;
}function onError(error) {if (error.syscall !== "listen") {throw error;}const bind = typeof httpPort === 'string'? "Pipe " + httpPort: "Port " + httpPort;switch(error.code) {case "EACCES":console.error(bind + " requires elevated privileges");process.exit(1);break;case "EADDRINUSE":console.error(bind + " alreay is use");process.exit(1);break;default:throw error;}
}function onListening() {const addr = httpServer.address();const bind = typeof httpPort === 'string'? "Pipe " + httpPort: "Port " + httpPort;debug("Listening on " + bind);
}

这有点长。所以,让我打破这一点并解释每个部分。

#!/usr/bin/env node
"use strict";const server = require("../dist/server");
const debug = require("debug")("express:server");
const http = require("http");

首先,我们有node shebang来执行这个脚本。如果您使用的是Windows,只需将此文件重命名为www.js,node将根据文件扩展名执行此操作。

然后我们通过“use strict”命令启用严格模式。

然后我需要一些依赖。首先,我将在:dist/server.js中有一个模块(文件)。我们还没有创建这个,所以不要担心。然后我们需要express和http模块。

const httpPort = normalizePort(process.env.Port || 8080);
const app = server.Server.bootstrap().app;
app.set("port", httpPort);
const httpServer = http.createServer(app);


首先,我确定将http服务器绑定到的端口,并监听。这将首先检查PORT环境变量,然后默认为8080。

我还使用了由Google Cloud Platform团队提供的normalizePort()函数。我从他们的示例应用程序中借用了这些。

接下来,我将使用bootstrap()老启动我的应用程序。在创建Server类之后,这将更有意义。

然后我为HTTP服务器设置端口。

最后我们创建了http服务器,传入我们的express app。

httpServer.listen(httpPort);httpServer.on("error", onError);httpServer.on("listening", onListening);

在这部分中,我将指定我们的http服务器将侦听的端口,然后我附加一些事件处理程序。
我正在听error和listening事件。
在创建应用程序期间发生错误时将触发错误事件。
当http服务器启动并正在侦听指定端口时,将触发侦听事件。

第五步、安装TypeScript 和 Grunt

接下来,使用npm install命令安装TypeScript:

$ npm install typescript --save-dev

我将使用Grunt任务运行器来编译TypeScript源代码。
使用npm安装grunt:

$ npm install grunt --save-dev

现在我们安装了grunt,让我们安装一些任务运行器:

$ npm install grunt-contrib-copy --save-dev
$ npm install grunt-ts --save-dev
$ npm install grunt-contrib-watch --save-dev

grunt-contrib-copy任务运行器将./public和./views目录中的文件复制到./dist目录中
我们将使用grunt-ts任务来编译TypeScript源代码。
我们将使用grunt-contrib-watch来监视对TypeScript源文件的任何更改。
当一个文件更新(或保存)文件后,我想重新编译我的应用程序。
结合我们之前在package.json文件中创建的dev脚本,我们将能够轻松地对TypeScript源进行更改,然后立即在浏览器中查看更改。

第六步、创建gruntfile.js

下一步是配置Grunt来编译我们的TypeScript源代码。
首先,在应用程序根目录中创建gruntfile.js文件。

$ touch gruntfile.js

在您喜欢的编辑器中打开gruntfile.js文件。我使用Visual Studio Code。gruntfile.js文件内容如下


以下是gruntfile.js的说明:

1. 使用exports对象,我们将导出一个将由grunt任务运行器调用的函数。这是非常标准的。它有一个名为grunt的参数。

2. 遵循最佳实践我正在启用严格模式。

3. 然后我们调用grunt.initConfig()方法并传入我们的配置对象。

4. 在我们的配置对象中,我们指定每个任务

5. 第一项任务是复制。此任务将复制./public和./views目录中的文件。

6. 接下来的任务是ts。此任务将TypeScript源代码编译为可由Node.js执行的JavaScript。已编译的JavaScript代码将输出到./dist目录。

7. 第三项任务是观察。此任务将监视对TypeScript源文件(*.ts)以及视图模板文件(*.pug)的任何更改。

如果一切正常,您应该能够执行grunt命令

$ npm run grunt

你应该看到这样的事情:

> ts_node_blog@1.0.0 grunt /Users/durban/nodejs/ts_node_blog
> gruntRunning "copy:build" (copy) taskRunning "ts:app" (ts) task
No files to compileDone.

第七步、安装中间件

在我们创建server.ts模块之前,我们需要安装一些更多的依赖项。
我在此示例Express应用程序中使用以下中间件:

1. body-parser[https://github.com/expressjs/body-parser]
2. cookie-parser[https://github.com/expressjs/cookie-parser]
3. morgan[https://github.com/expressjs/morgan]
4. errorhandler[https://github.com/expressjs/errorhandler]
5. method-override[https://github.com/expressjs/method-override]

您可以使用上面的链接阅读有关这些内容的更多信息。让我们继续,通过npm安装这些:

$ npm install body-parser --save
$ npm install cookie-parser --save
$ npm install morgan --save
$ npm install errorhandler --save
$ npm install method-override --save

我们还需要为这些模块安装TypeScript声明文件。
在TypeScript 3之前,您必须使用名为Typings的开源项目。
现在不再是这种情况,因为TypeScript 3极大地改进了对第三方模块声明(或头文件)的支持。

让我们使用npmjs.org上的@ types/repository安装TypeScript声明文件:

$ npm install @types/cookie-parser --save-dev
$ npm install @types/morgan --save-dev
$ npm install @types/errorhandler --save-dev
$ npm install @types/method-override --save-dev

第八步、创建Server类

首先,为TypeScript代码创建一个src目录,然后创建一个新的server.ts文件。

我们准备好在Node.js上使用Express启动我们的新HTTP服务器。
在我们这样做之前,我们需要创建我们的Server类。
这个类将配置我们的express Web application,会涉及到REST API和routes的类。下面是定义我们的Server类的server.ts文件的开头:

import * as bodyParser from "body-parser";
import * as cookieParser from "cookie-parser";
import * as express from "express";
import * as logger from "morgan";
import * as path from "path";
import errorHandler = require("errorhandler");
import merhodOverride = require("method-override");/*** The Server * * @class Server*/
export class Server {public app: express.Application;/*** Bootstrap the application* * @class Server* @method bootstrap* @static* @return Returns the newly created injector for this app. Returns the newly created injector for this app.*/public static bootstrap(): Server {return new Server();}/*** Constructor* * @class Server* @method constructor*/constructor() {// create express applicationthis.app = express();// configure applicationthis.config();// add routesthis.routes();// add apithis.api();}/*** Create REST Api routes* * @class Server* @method api*/public api() {}/*** Configure application* * @class Server* @method config*/public config() {}/*** Create router* * @class Server* @method router*/public routes() {}
}

让我们深入研究Server.ts模块(文件)中的Server类。

导入

import * as bodyParser from "body-parser";
import * as cookieParser from "cookie-parser";
import * as express from "express";
import * as logger from "morgan";
import * as path from "path";
import errorHandler = require("errorhandler");
import merhodOverride = require("method-override");

1. 首先,我们导入我们以前安装的中间件和必要的模块。
2. body-parser中间件将JSON有效负载数据解析为可在我们的express应用程序中使用的req.body对象。
3. cookie-parser中间件类似于body-parser,因为它解析用户的cookie数据并在req.cookies对象中使用它。
4. 然后我们导入express模块。这是express框架。
5. 我正在使用morgan HTTP logger 中间件。这应该只在开发期间使用。
6. 然后我导入path模块。我将使用它来为config()方法中的public和views目录设置路径目录。
7. errorhandler 中间件将在开发期间处理错误。同样,这不应该用于生产。相反,您需要记录错误,然后向用户显示错误指示。
8. 最后,我使用method-override中间件。您可能不需要这个,但在REST API配置中使用"PUT"和"DELETE"HTTP谓词时需要这样做。

Server类

/*** The Server * * @class Server*/
export class Server {public app: express.Application;/*** Bootstrap the application* * @class Server* @method bootstrap* @static* @return Returns the newly created injector for this app. Returns the newly created injector for this app.*/public static bootstrap(): Server {return new Server();}
}

接下来,我们创建一个名为Server的新类。
我们的类有一个名为app的公共变量。
请注意,我们的应用程序是express.Application类型。
在Server类中,我有一个名为bootstrap()的静态方法。
这在我们的www启动脚本中调用。
它只是创建Server类的新实例并返回它。

constructor函数

/*** Constructor* * @class Server* @method constructor*/
constructor() {// create express applicationthis.app = express();// configure applicationthis.config();// add routesthis.routes();// add apithis.api();
}

在constructor()函数中,我通过创建一个新的express应用程序来设置app属性的值。
然后我调用Server类中定义的一些方法来配置我的应用程序并创建我的应用程序的REST API和HTTP路由。
现在这些都是空的。

此时您可能想要测试一下。
虽然我们还没有配置HTTP服务器,但我们应该能够使用grunt编译我们的TypeScript:

$ npm run grunt

您应该看到编译成功完成的指示:

$ npm run grunt> ts_node_blog@1.0.0 grunt /Users/durban/nodejs/ts_node_blog
> gruntRunning "copy:build" (copy) taskRunning "ts:app" (ts) task
Compiling...
Using tsc v3.0.3TypeScript compilation complete: 2.65s for 1 TypeScript files.Done.

第九步、配置Server

下一步是在我们的Server类中实现config()方法:

关于config()方法的一些注意事项:

1. 首先,我在/public设置静态路径。位于./public文件夹中的任何文件都可以公开访问(duh)。
2. 接下来,我配置了pug模板引擎。我们将在一分钟内完成安装。我们所有的pug模板文件都位于./views目录中。
3. 然后我们添加morgan logger中间件。
4. 然后我们添加了body-parser中间件来解析JSON以及查询字符串。
5. 然后我们添加cookie-parser中间件。
6. 然后我们添加方法覆盖中间件。
7. 最后,我们添加一些代码来捕获404错误以及任何应用程序异常。

如上所述,我们正在使用pug(哈巴狗)模板引擎。
但是,在我们使用它之前,我们需要通过npm安装它:

$ npm install pug --save

我们还应该创建public和views目录:

$ mkdir public
$ mkdir views

这是我们的目录结构应该是这样的:

.
├── bin
│   └── www
├── dist
│   └── server.js
├── gruntfile.js
├── package-lock.json
├── package.json
├── public
├── src
│   └── server.ts
└── views


现在我们的服务器已配置,我们应该能够编译我们的TypeScript源代码并启动节点HTTP服务器:

$ npm run grunt
$ npm start

然后,您应该看到该节点正在运行:

> ts_node_blog@1.0.0 start /Users/durban/nodejs/ts_node_blog
> node ./bin/www

现在启动浏览器并转到http//localhost:8080。
如果一切正常,您应该在浏览器中看到以下消息:

这是因为我们还没有定义任何route。
让我们继续。

第十步、创建BaseRoute类

现在我们的服务器已配置并运行,我们已准备好开始构建我们的Web应用程序的路由。
但是,你可能会问自己route是什么。
好吧,根据Express文档:

Routing refers to determining how an application responds to a client request to a particular endpoint, which is a URI (or path) and a specific HTTP request method (GET, POST, and so on).

首先,让我们创建一个带有两个新文件的./src/routes目录:route.ts和index.ts。

$ cd ./src
$ mkdir routes
$ cd routes
$ touch route.ts
$ touch index.ts

route.ts模块将导出BaseRoute类。
所有路由类都将扩展BaseRoute。
让我们来看看route.ts的内容。

import { NextFunction, Request, Response } from "express";/*** BaseRoute* * @class BaseRoute*/
export class BaseRoute {protected title: string;private scripts: string[];/*** Constructor* * @class BaseRoute* @method constructor*/constructor() {this.title = "TS Blog";this.scripts = [];}/*** Add a JS external file to the request* * @class BaseRoute* @method addScript* @param src {string} The src to the external JS file* @return {BaseRoute} The self for chaining*/public addScript(src: string): BaseRoute {this.scripts.push(src);return this;}public render(req: Request, res: Response, view: string, options?: Object) {// add constantsres.locals.BASE_URL = "/";// add scripts res.locals.scripts = this.scripts;// add titleres.locals.title = this.title;res.render(view, options);}
}


BaseRoute目前相当薄。但是,这将作为一种在我的应用程序中实现身份验证的方法,以及所有路由可能需要的许多其他功能。

我有一个标题字符串变量,它将保存路径的标题。

作为示例,BaseRoute当前存储特定路由所必需的脚本数组。可能还希望在BaseRoute中定义所有路径都需要的脚本。这只是一部分特性在BaseRoute中实现的一个示例,该功能将可用于所有路由。

此外,BaseRoute类有一个render()方法。这将在我们的扩展类中的每个路由方法中调用。这为我们提供了一种方法来渲染视图,并定义了常见的本地模板变量。

在此示例中,我将BASE_URL,脚本和标题设置到每个视图中。

第十一步、创建IndexRoute类

路由定义通过以下方式定义:

app.METHOD(PATH, HANDLER)

METHOD是适当的HTTP动词,例如get或post。该方法应为小写。PATH是请求的URI路径。并且,HANDLER是在路线匹配时执行的功能。index.ts模块将导出IndexRoute类。
我们来看看index.ts的内容。

import { NextFunction, Request, Response, Router } from "express";
import { BaseRoute } from "./route";/*** IndexRoute* * @class IndexRoute*/
export class IndexRoute extends BaseRoute {/*** Constructor* * @class IndexRoute* @method constructor*/constructor() {super();}/*** Create the router* * @class IndexRoute* @method create* @static* @param router */public static create(router: Router) {console.log("[IndexRoute::create] Creating index route");// add home page routerouter.get("/", (req: Request, res: Response, next: NextFunction) => {new IndexRoute().index(req, res, next);})}/*** The home page route* * @class IndexRoute* @method index* @param req {Request} The express Request Object.* @param res {Response} The express Response Object.* @param next {NextFunction} Execute the next method.*/public index(req: Request, res: Response, next: NextFunction) {// set custom titlethis.title = "Home | TS Blog";let options: Object = {"message": "Welcome to the TS Blog",};// render templatethis.render(req, res, "index", options);}
}


我们来看看IndexRoute类:

1. 首先,我们从express模块​​导入NextFunction,Request,Response和Router类。
2. 我还从routes模块导入BaseRoute类。
3. create()静态方法创建所有将在类中定义的路由。在这个例子中,我只定义了一个路由。但是,您可能会为应用程序的部分定义多个路由。例如,UsersRoute类可能具有/users/signin/users/signup等的路由。
4. constructor()函数只是调用BaseRoute的构造函数。
5. index()函数将呈现我们的模板。在我们渲染模板之前,我们设置一个自定义标题,并定义一个名为options的对象,其中包含将在我们的模板中可用的属性和值。在这个例子中,我设置一个名为message的本地模板变量,其中包含一个简单的字符串。我将在index.pug模板中输出。

第十二步、定义routes

现在我们已经创建了第一个路由的shell,我们需要在Server类中定义它。
但是,在我们定义路由之前,让我们首先通过以下方式在server.ts模块中导入我们的IndexRoute类:

import { IndexRoute } from "./routes/index";

然后,让我们在server.ts模块中实现routes()方法:

/*** Create router* * @class Server* @method router*/
public routes() {let router: express.Router;router = express.Router();// IndexRouteIndexRoute.create(router);// use router middlewarethis.app.use(router);
}

在routes()方法中,我们创建了express.Router()实例。
然后,我们调用静态IndexRoute.create()方法并传入路由器实例。
最后,我们将路由器中间件添加到我们的应用程序中。

第十三步、创建Template

现在我们已经创建并定义了路由,我们需要创建必要的模板。
在这个例子中,我将在views目录中创建一个index.pug文件。

$ cd ./views
$ touch index.pug

这是我的示例index.pug文件的样子:

htmlheadtitle= titlebodyh1= message

第十四步、启动服务

我们完成了。我们为使用TypeScript源代码中的Express开发应用程序奠定了坚实的基础。下一步是编译并启动服务器。

$ npm run grunt
$ npm start

现在启动浏览器并转到http://localhost:8080。
如果一切正常,您应该在浏览器中看到以下消息:

第十五步、安装nodemon

如果你想启动我的节点服务器来监视源代码的任何变化(在开发中),那么我建议你使用nodemon

$ npm install nodemon --save-dev

然后我们可以运行我们在package.json中定义的自定义开发脚本来启动我们的应用程序使用nodemon:

$ npm run dev
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Mac下更新nodejs版本

    第一步,先查看本机node.js版本: $ node -v第二步,清除node.js的cache: $ sudo npm cache clean -f 第三步,安装 n 工具,这个工具是专门用来管理node.js版本的,别怀疑这个工具的名字,是他是他就是他,他的名字就是 "n" $ sudo npm instal…...

    2024/5/1 9:38:30
  2. 配置Nginx SSL Node.js环境详细指南

    译文链接:http://www.codeceo.com/article/nginx-ssl-nodejs.html英文原文:ConfiguringNginx and SSL with Node.js翻译作者:码农网 –小峰Nginx是一款高性能的HTTP服务器,同时也是一款高效的反向代理服务器。不像传统的服务器,Nginx是基于事件驱动的异步架构,内存占用少…...

    2024/4/24 13:06:19
  3. NTVS:把Visual Studio变成Node.js IDE的工具 搜集资料。

    NTVS:把Visual Studio变成Node.js IDE的工具 介绍了一个可以使vs作为调试工具的东西。 http://blog.jobbole.com/53241/在Visual Studio上开发Node.js程序 http://blog.csdn.net/binyao02123202/article/details/19235309 在Visual Studio上开发Node.js程序(2)——远程调试及发…...

    2024/5/1 13:00:34
  4. mac下配置Node.js开发环境、express安装、创建项目

    mac下配置Node.js开发环境、express安装、创建项目 一、Node.js的安装 去官网下载对应的平台版本就可以了,https://nodejs.org 二、express安装sudo npm install -g express 进行全局安装。 这时有可能会安装不成功,用下面的命令即可 sudo npm install express-generator -g三…...

    2024/5/1 5:29:57
  5. Node.js +Swagger Editor + Swagger-UI 环境搭建

    安装node.js 下载node.js最新版 https://nodejs.org/en/download/点击 安装器 node-v6.11.1.pkg 开始安装一路下一步,安装完成node.js安装后验证npm -v node -v 下载Swagger-Editor https://github.com/swagger-api/swagger-editor/releases 复制最新 release下载地址在终端下…...

    2024/4/20 7:04:13
  6. Mac机配置 Sublime Text 用 Node.js 执行 JavaScript 程序

    1. 首先到 nodejs.org 下载 Node.js 安装包并安装。 2. 打开 Sublime Text 2 编辑器。选择菜单 Tools --> Build System --> new Build System... 3. 将文件保存为 JavaScript.sublime-build 4. 文件内容为: {"cmd": ["/usr/local/bin/node", &quo…...

    2024/5/1 9:10:14
  7. 【深入浅出Node.js系列二】Node.js&NPM的安装与配置

    1 Node.js安装与配置1.1 Windows平台下的Node.js安装 在过去,Node.js一直不支持在Windows平台下原生编译,需要借助Cygwin或 MinGW来模拟POSIX系统,才能编译安装。幸运的是2011年6月微软开始与Joyent合作移植Node.js到Windows平台上 (http://www.infoq.com/cn/news/2011/06/node…...

    2024/4/24 13:06:16
  8. Mac OS X 下Node.js开发环境的搭建

    1.安装Xcode 2.安装Homebrew 谷歌搜索Homebrew 复制命令行 打开终端 粘贴命令行 点击回车 安装 输入密码等 2.安装Nodejs利用Homebrew安装nodejs打开终端 输入 :brew install nodejs 回车查询nodejs版本:node --version 3.安装文档数据库 MongoDB打开终端 输入 brew inst…...

    2024/5/1 12:51:55
  9. win 10 node运行js文件遇到的问题

    Win10 node运行js文件遇到的问题写该文章的原因需要工具材料正文 写该文章的原因 在挑战 pintia.cn 上的题目,用javascript语言进行挑战,提交编译的方式是用node.js进行编译校验。提交答案后,无法确定输出。因此需要自己运行程序确认基本通过之后才提交答案,因此我们需要安…...

    2024/4/24 13:06:15
  10. mac 下vue环境搭建过程(包含node.js的安装以及踩坑)

    环境安装1.Mac OS系统安装 brew打开终端运行以下命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2.安装 nodejsbrew install nodejs用 npm install npm@3.10.3 更新 npm 版本报错:(node:42) fs: re-evalu…...

    2024/5/1 12:41:20
  11. 使用sublime text 开发node.js

    本机环境: windows7 64位 1. 下载安装sublime text, 不用注册即可完全使用,只是偶尔弹框提示购买,完全可以忍受。 2. 在sublime text下按 Ctrl+Shift+p 在输入框里输入install, 然后选择Package Control: Install Package3. 在接下来的对话框中输入nodejs 我这里已经安装过no…...

    2024/4/24 13:06:12
  12. GNVM - Node.js 多版本管理器

    GNVM - Node.js 多版本管理器 GNVM 是一个简单的 Windows 下 Node.js 多版本管理器,类似的 nvm nvmw nodist 。c:\> gnvm install latest 1.0.0-x86 1.0.0-x64 5.0.0 Start download Node.js versions [5.10.1, 1.0.0, 1.0.0-x86, 5.0.0]. 5.10.1: 18% [=========>____…...

    2024/5/1 8:06:44
  13. Node.js 初体验

    参看原文链接: http://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html?ca=drs 下面记录一下我的学习经历: 1。首先我在 node.js 的官方网站上面下载了 mac os 平台上面适用的安装包, 然后将其安装到了电脑里面(一路的next)~2。然后我将上面那篇教程里面…...

    2024/5/1 14:43:09
  14. 使用Backbone.js, ExpressJS, node.js, MongoDB的web应用样板工程

    这是web应用的一个完整的样板工程,用到了Backbone.js & Marionette, node.js & ExpressJS,MongoDB & Moogoose, Handlebars, Grunt.js,Bower和Browserify!我建立了一个超级基础的单页面应用程序(SPA),就是一个简单的通讯录管理器, 但麻雀虽小,五脏俱全…...

    2024/5/1 7:41:48
  15. 用node.js和express.js和jade搭建轻型cms系统

    http://cnodejs.org/topic/4f16442ccae1f4aa270010bf前言:我们主要做的是iphone/ipad程序,但关注node.js很久,因为我们多少总是要做网站,做后台。node.js就像一个非常快的ruby。对于我们而言,其实学习node.js起来还是很简单,网上资料很多,但没有看到一些比较完整的例子。…...

    2024/5/1 8:30:19
  16. Node.js服务端的javascript脚本

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始。比较独特的是,Node.js会假设你是在POSIX环境下运行它Linux 或 Mac OS X。如果你是在Windows下,那就需要安装MinGW以获得一个仿POSIX的环境。在Node中,Http是首要的。Node为创建http服务器作…...

    2024/5/1 14:03:14
  17. 如何使用Visual Studio Code调试Node.js

    转载自:http://blog.darkthread.net/post-2016-08-06-debug-nodejs-with-vscode.aspx 如有侵犯,请来信:oiken@qq.com如何使用Visual Studio Code偵錯Node.js?小木頭去上電腦課,一回家,想當然爾程式魔人老爸立即展開偵訊:學什麼語言?用什麼開發工具?做了什麼練習?小子…...

    2024/5/1 8:19:23
  18. Mac中Node.js版本升级

    > 第一步,先查看本机node.js版本: > $ node -v > > 第二步,清除node.js的cache: > $ sudo npm cache clean -f > > 第三步,安装 npm 工具 > $ sudo npm install -g n > > 第四步,安装最新版本的nod…...

    2024/5/1 7:19:55
  19. Edge.js增加了对 Linux和Mac OS X的支持,所以C#和Node.js可以在任意环境中进行开发...

    Edge.js项目添加了对Linux和Mac OS X环境的支持。它与.NET CLR集成,并结合Node.js,提供在JavaScript中运行C#代码的能力。应用程序可以使用.NET代码来在不阻断Node.js事件循环的情况下,处理进程密集型的任务。当单独运行于微软平台时,这意味着开发者不必使用C/C++就能编写W…...

    2024/4/15 4:14:00
  20. docker之mac下部署nodejs项目

    docker之mac下部署nodejs项目mac下docker安装初始化一个Node.js项目构建项目镜像运行nodejs项目镜像将本地镜像推送到docker hub上 mac下docker安装 1.官网下载2. 安装教程可参照官方安装教程 3.安装成功可以看到此界面:4.检验安装结果。 docker -v结果为:初始化一个Node.js项…...

    2024/5/1 11:16:00

最新文章

  1. 【面试经典 150 | 回溯】单词搜索

    文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;回溯 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行回顾…...

    2024/5/1 15:01:40
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. DevOps三步法之反馈:流动是油门,反馈是刹车

    打个比方&#xff0c;流动是油门&#xff0c;反馈是刹车。流动是关于行使&#xff0c;反馈是关于安全。车辆要想持续平稳运行&#xff0c;需要油门与刹车良好配合&#xff0c;否则就有可能车毁人亡。核电站需要使核反应处于临界状态&#xff0c;超出临界状态就是核爆炸这也需要…...

    2024/4/30 6:15:51
  4. spark on hive

    由于spark不存在元数据管理模块&#xff0c;为了能方便地通过sql操作hdfs数据&#xff0c;我们可以通过借助hive的元数据管理模块实现。对于hive来说&#xff0c;核心组件包含两个&#xff1a; sql优化翻译器&#xff0c;翻译sql到mapreduce并提交到yarn执行metastore&#xf…...

    2024/5/1 13:24:51
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/29 23:16:47
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57