大家好,我是Express + NodeJS的新手。我来自Java,现在试着赶上Node,所以如果我提出一些基本的问题,请保持温和(我花了最近两天时间来处理这些问题)
我的问题与文档有关。
因此,当我查看Express网站上的一些示例时,我会看到以下内容
app.get('/users/:id?', function(req, res, next){
......
});
有时候
app.get('/users/:id?', function(req, res){
......
});
我的文档在哪里确定有多少参数进入函数?首先theres是req,res和next然后它有req和res。
第二个问题:请求和响应对象的可用文档以及作为框架一部分提供的其他方法的文档在哪里?
我查看了这里的文档http://expressjs.com/guide.html#req.header(),但我无法想象这是完整的文档,因为我注意到在本文档中没有的示例中使用的方法。
有人能指出我用于express + nodeJS开发的最常用文档吗?如果你能列出这里的所有链接,我将非常感激!
答案 0 :(得分:3)
第一个问题:你需要放慢一分钟。除了Java之外,您是否有使用其他语言的经验? Javascript没有您从Java中了解的方法签名。这是一个简单的例子:
function foo(bar, baz, qux) {
var result = bar + baz;
if(qux) {
result += qux;
}
return result;
}
foo(1, 2);
// => 3
foo(1, 2, 3);
// => 6
这是一个人为的例子,但它表明你可以声明一个带有3个参数的函数,并且只使用其中的两个参数。实际上,它可以直接使用arguments
并接受比函数声明中指定的更多参数!
function bar(foo) {
if(arguments.length > 1) {
var baz = arguments[1];
return foo + baz;
}
return foo;
}
bar(2);
// => 2
bar(2, 4);
// => 6
无论如何,总之,您的路由处理程序function(req, res, next) {}
将始终使用req
,res
和next
进行调用 - 但您可能就是这样不需要next
(因为你永远不会传递控制权),所以你省略它(它仍然是那里,在你的arguments
对象中,只是没有作为next
)的范围。有些人觉得这很草率,有些人觉得这很简洁。
第二个问题:这是node.js docs,http.ServerRequest,http.ServerResponse。您已经了解快速指南。
答案 1 :(得分:3)
JavaScript对函数所使用的参数数量有点松懈。如果一个函数有两个参数,你仍然可以传递五个参数 - 你传递的前两个将进入命名参数,其余的只能通过arguments
对象获得。 (同样,如果你编写一个带三个参数的函数,调用者仍然只能传递两个,第三个函数的值为undefined
。)
所以基本上,函数总会得到三个参数,但很多时候你无意使用next
延续,所以你可以把它关掉,JavaScript会默默地吞下它。
至于文档,该指南是Express的官方文档。 Node.js的文档是at nodejs.org。 Express的模块通常基于它们的vanilla节点等价物(例如,服务器基于Node的http.Server)。