确定并更改 node.js 的 DocumentRoot/port 并运行带有参数的函数

Posted

技术标签:

【中文标题】确定并更改 node.js 的 DocumentRoot/port 并运行带有参数的函数【英文标题】:Determine & change DocumentRoot/port of node.js & run a function w/parameters 【发布时间】:2018-07-31 06:01:42 【问题描述】:

如何确定和更改 Node.js 上的“DocumentRoot”等效(Apache)端口号?我需要通过调用函数并传递一些参数来测试脚本文件(是的,我知道该文件可以自动执行它)。

documentation 中没有“入门”或提及这一点。

【问题讨论】:

【参考方案1】:

Apache HTTPD 是一个通用的 Web 服务器。 Node.js 是一个开发框架,包含一个用于创建 HTTP 服务器的标准库。因此,基于 Node.js 的应用程序没有像 Apache HTTPD 那样的标准配置。

使用 Node.js 编写 Web 服务器的基本示例位于 https://nodejs.org/api/synopsis.html#synopsis_example

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => 
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
);

server.listen(port, hostname, () => 
  console.log(`Server running at http://$hostname:$port/`);
); 

也就是说,定义文件从哪里加载以及它们在哪个端口上提供服务。

这就是 Fastify、Hapi 和 Express 等框架的用武之地。这使得编写通用 Web 服务器变得更加容易。

【讨论】:

一位朋友建议 Express,我按照这里的指示进行操作:coderwall.com/p/mbov6w/running-nodejs-and-express-on-windows 然而C:\MEDIA\INTERNET\Node.js>node app module.js:540 throw err; Error: Cannot find module。我对设置 VM 不感兴趣,我想在 Windows 上本地运行它。该教程缺少哪一部分? 啊:node "C:\Users\example\index.js" ... 那么我该如何执行一个名为callWeatherApi(city, date) 的函数呢?我可以填写自己的参数。这确实是我最终要问的问题,尽管我尽量让事情保持相当简单,因为我知道它不会像 Apache 那样简单。 Apache HTTPD 是一个应用程序而不是一个开发框架。它们不是等价的。使用nodeschool.io 学习Node.js。 虽然您发布的内容有助于跳过一些步骤,但我会对其进行投票并接受我自己发布的答案。我认为这是公平的,因为一开始就很难提出问题。谢谢。 您在回答后更改了问题。当一个目标不断前进时,它是无法完成的。测试应该使用像 node-tap.org 这样的库来完成【参考方案2】:

我首先安装了 Node.js,它在 Windows 中只有一个命令提示符。仍然不确定端口号。

节点似乎从它的目录执行脚本(例如C:\Node.js\)。正如詹姆斯在另一个答案中提到的那样,Node.js 本身并没有做太多事情。我关注了tutorial on getting Express to work on Windows。本教程未能提及 where 脚本的运行位置,因此请忽略过去在 normal 命令提示符(不是 Node 的控制台)上运行以下命令的指示:

    Run npm install npm install express -g npm install url -g npm install fresh -g npm install cookie -g npm install methods -g npm install crc -g npm install send -g npm install connect -g npm install commander -g npm i -D run-func

好的,最后一行代码允许我们运行一个函数并传递我通过Pawel's answer here找到的参数。

所以现在我可以执行以下操作:

node run-func "C:\Users\John\HTTP\index.js" function_name param1 param2

【讨论】:

全局安装这些模块不是一个好习惯。模块应该安装在它们所应用的项目的本地。

以上是关于确定并更改 node.js 的 DocumentRoot/port 并运行带有参数的函数的主要内容,如果未能解决你的问题,请参考以下文章

node.js async.each 回调,我怎么知道它啥时候完成?

如何配置 OpsWorks 以部署非官方支持的 Node.js 版本?

Node js:以编程方式更改 csv 文件编码并解析为 json

如何使用 Node.js 确定当前的操作系统

为 node.js 重新加载。有可能吗? [复制]

Node.js 错误 ENOENT,未更改任何内容时打开“文件/路径”