如何在node.js中导出路由并进行表达?

时间:2019-04-13 12:47:37

标签: javascript node.js express

我的问题并非完全在问题中,而是在同一页面中。 因此,我将路线导出到了我的主app.js文件中,但是我的张贴路线无法正常工作。我的问题在代码下方,因为我需要您阅读代码才能清楚。

这是我将从中导出路由(registration.js)的文件:

const express = require("express");
const router = express.Router();
console.log("azerty");
router.post("/register", (req, res)=>{
    console.log("qwerty");
    res.stautus(200).send("hello");
});
module.exports = router;

这是我将导出路由(app.js)的主文件:

const express = require("express");
const app = express();
...
app.use("/register", require("./registration.js"));

这是我的html表单:

<form action="/register" method="post">
            <input type="text" placeholder="First Name" name="fstName" required/>
            <input type="text" placeholder="Last Name" name="lstName"required/>
            <input type="submit" value="Submit"/>
</form>

我还有其他与此相关的问题:

  • 首先:为什么我在azerty时登录到控制台 http://localhost:3000/
  • 第二步:为什么我不断收到Cannot POST /register并在开发人员工具中出现404错误?而且我的路由处理程序中的代码无法运行。
  • 最后:这是导出路由的正确方法吗(例如在路由文件中使用express.Route()而仅在主要文件中使用express())?

4 个答案:

答案 0 :(得分:1)

azerty已登录到控制台,这意味着该路由已导入并且有效。

您已经以正确的方式导出了路线。 我认为您应该在 return 中的res.stautus(200).send("hello");之前使用registation.js。 像这样:

const express = require("express");
const router = express.Router();
console.log("azerty");
router.post("/", (req, res)=>{
    console.log("qwerty");
    return res.stautus(200).send("hello");
});
module.exports = router;

要使用此发布请求,请使用如下的api:localhost:3000/register

答案 1 :(得分:1)

我认为您使用app.use(“ / register” ...)在路由中添加了前缀,现在它是/ register / register

Juste在app.js或您的路由文件中将其删除

const express = require("express");
const router = express.Router();
console.log("azerty");
router.post("/register", (req, res)=>{
    console.log("qwerty");
    res.stautus(200).send("hello");
});
module.exports = router;
const express = require("express");
const app = express();
...

app.use(require("./registration.js"));

我不知道这是否是正确的方法,这就是我像您一样所做的事情

//src/app.js
// Import
import postRoutes from './routes/post';
import authRoutes from './routes/auth';

...
// Endpoints

app.use(postRoutes);
app.use(authRoutes);
// src/routes/post.js

...

const Router = express.Router();

/**
 * Routes
 */

Router.get('/post', getPosts);
Router.post('/post', isAuth,  creationValidation(), createPost);
Router.put('/post/:id', isAuth, editValidation(), putPost);
Router.delete('/post/:id', isAuth, deletePost);



/**
 * Export
 */
export default Router;

答案 2 :(得分:1)

首先,library(dplyr) df1 %>% add_count(Website) # A tibble: 7 x 2 # Website n # <chr> <int> #1 Abc 3 #2 Abc 3 #3 Abc 3 #4 Xyz 2 #5 Xyz 2 #6 Pqr 1 #7 Uvw 1 被记录下来,因为它没有嵌套在任何函数中。它将仅登录运行时,而您在azerty上对此没有任何影响。

第二,您http://localhost:3000/是因为使用路由器时,根是传递给Cannot POST /register的第一个参数-在当前设置中,app.use是路由。 要解决此问题,请将/register/register中的router.post的第一个参数更改为registration.js

/

最后,对于导出路由,这是我看到的最常见的设置。

答案 3 :(得分:1)

  

第一:为什么我在http://localhost:3000/时,azerty为什么登录到控制台?

console.log("azerty")registration.js的文件范围内,因此将在您的app.js要求时立即记录。

此行足以触发控制台日志记录:app.use('/register', require('./registration'));,因为当express在开始时将其作为中间件挂载时,需要该模块

  

第二个:为什么我不断收到Cannot POST / register并在开发人员工具中出现404错误?而且我的路由处理程序中的代码无法运行。

因为它在您认为已安装的位置未安装

router.post("/register ...在这里,您已经安装在/register路径中,然后在app.use("/register", require("./registration.js"));中,您已经安装了另一个/register路径。将两者结合在一起,您将获得完整的路径,/register/register(也请检查注释中的错字)

因此要安装到localhost:3000/register,您必须定义如下(注意差异):

router.post("/", (req, res)=>{ ...

// and then
app.use("/register", require("./registration.js"));

// or simply
router.post("/register", (req, res)=>{ ...

// and then
app.use(require("./registration.js"));
  

最后:这是导出路由的正确方法吗(例如在路由文件中使用express.Route()而仅在主要文件中使用express())?

是的,这很好。但是请记住安装路径。