首页 > 解决方案 > nodeJs中的路由-我的路由不起作用的原因是什么?

问题描述

我通过几个路由器管理我的路由,但是出了点问题,当我尝试调用一个函数时,我得到了错误:

错误:没有指定默认引擎,也没有提供扩展。
我不明白我的问题可能是什么。如果有人能提供帮助,我会很高兴

我的代码:

// index.js
const express = require("express");
const router = express.Router();

const userRouter = require("./userRouter");
const qeustionRouter = require("./questionRouter");
const questionToTestRouter = require("./questionToTestRouter");
const testRouter = require("./testRouter");
const subjectRouter = require("./subjectRouter");



/* GET home page. */
router.get("/", function (req, res, next) {
res.render("index", { title: "Express is run" });
});

router.get("/user",userRouter);
router.get("/qeustion",qeustionRouter);
router.get("/questionToTest",questionToTestRouter);
router.get("/test",testRouter);
router.get("/subject",subjectRouter);


module.exports = router;

另一个路由器例如:

// userRouter.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');



router.post('/signUp', userController.signUp)
router.get('/login', userController.login)
router.delete('/deleteStudent', userController.deleteStudent)
router.delete('/deleteTeacher', userController.deleteTeacher)
router.get('/getAllUsers', userController.getAllUsers)
router.get('/getStudentsByTeacherId/:teacherId', userController.getStudentsByTeacherId)
router.get('/getTeachersByStudentId/:userId', userController.getTeachersByStudentId)
router.post('/updateUser', userController.updateUser)


module.exports = router
// app.js
var express = require("express");
var cors = require("cors")
const mongoose = require('mongoose');
//var path = require("path");
// var favicon = require("serve-favicon");
// var logger = require("morgan");
// var cookieParser = require("cookie-parser");
var bodyParser = require("body-parser");

var routes = require("./routes/index");

var app = express();

// view engine setup
// app.set("views", path.join(__dirname, "views"));
// app.set("view engine", "jade");

// // uncomment after placing your favicon in /public
// // app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
// app.use(logger("dev"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// app.use(cookieParser());
// app.use(express.static(path.join(__dirname, "public")));
app.use(cors());
app.use("/", routes);


//--------------------------------------
//listen to localhost
app.listen(4000, (req, res) => {
  console.log("listening on port 4000");
})
//--------------------------------------

//connect to mongo//
const connectionParams = {
  useNewUrlParser: true,
  // useCreateIndex: true,
  useUnifiedTopology: true
}

mongoose.connect(process.env.DB_CONNECT, connectionParams)
  .then(() =>
    console.log("connected to mongo"))
  .catch((error) =>
    console.log("error: " + error))



// catch 404 and forward to error handler
app.use(function (req, res, next) {
  var err = new Error("Not Found");
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get("env") === "development") {
  app.use(function (err, req, res, next) {
    res.status(err.status || 500);
    res.render("error", {
      message: err.message,
      error: err,
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
  res.status(err.status || 500);
  res.render("error", {
    message: err.message,
    error: {},
  });
});

module.exports = app;

标签: node.jsexpress

解决方案


I think you need a view engine. I see you are defining "jade" as your view engine but it is commented out and it is not in the index.js

  1. please make sure you installed jade package. You can check this by looking at your package.json file.

npm install jade --save

  1. You need to define jade as your view engine (in the index.js) and your jade files must be stored inside the views folder. Inside index.js file, you can change all router keywords to app
const express = require ("express");
const app = express ();
app.set("view engine","jade")

And delete this: const router = express.Router();

  1. And this folder must be placed at the root of your project (in other words, your index.js file and "views" folder should be at the same level). If you do it in this way, you wont need to define a path route.

I kindly advise you to use "ejs" as your view engine. It is more common than "jade". You can create ejs files easily, just like an html page.

And first start with a single route to test if your express framework is working. You can then gradually add up other routes. And please let me know if this answer helps, otherwise I will delete.


推荐阅读