【发布时间】:2019-11-01 12:41:44
【问题描述】:
我对 JS 非常陌生,尤其是 Node 和 Express。我正在关注一些关于如何构建 API 的教程,同时学习 JS 的特殊功能,例如 let/const/var、箭头函数等。
在很多教程中我都看到过这样的事情:
somecode.then((result) => {someothercode})
其中:“somecode”例如是一个获取请求
“result”是返回值的名称还是 JS 开发者使用的约定? 我的意思是,这是否有效?
somecode.then((foo) => {someothercode})
还有对于req、res变量是什么意思?
app.get("/users/:userId", [
usersController.getById
]);
这里是 getById 函数(再次使用“结果”):
exports.getById = (req, res) => {
userModel.findById(req.params.userId).then((result) => {
res.status(200).send(result);
});
};
控制器需要(req, res)中定义的getById方法,是不是意味着,当我像上面的代码那样调用它时,req和res参数被隐式使用了?
还需要一个参数:
req.params.userId
在路由的url中,它如何传递给另一个文件? 我有一个使用 model.js 的 controller.js 文件的 route.js 文件。参数如何从路由到控制器?
如果我更改参数名称,它不会起作用吗?例如:
req.params.id
对不起,长篇大论,我正在尝试理解 JS 逻辑以养成一些好习惯并编写干净的代码。
谢谢!
【问题讨论】:
-
这些都是常规的变量名,你可以使用任何你想要的名字。
-
箭头左侧的名称是您选择赋予传递给函数的参数的名称。
-
@Barmar 那么参数的顺序在 (req,res) 的情况下很重要,如果我喜欢 (res, req) 那么 res 将是请求,req 是响应?跨度>
-
完全正确。 Express 按特定顺序传递它们,您有责任为它们指定与角色匹配的名称。
-
app.get(route,requestHandler) 是 http 请求的语法。在您的情况下,“usersController.getById”函数实际上是一个请求处理程序。任何请求处理程序都将按此特定顺序具有 (req,res) 参数。
标签: javascript node.js express