簡體   English   中英

為什么在server.js以外的其他文件上發布請求在node.js中不起作用?

[英]Why post requests on other files than server.js doesn't work in node.js?

我是node.js的初學者。 我遇到以下問題:
當我在外部文件(不是server.js的另一個文件)中的函數上發出發布請求時,它不起作用(在郵遞員上加載了很長時間,並且我有一個“無法獲得任何響應的答案“)。 例如,當我在server.js上復制函數時,它可以工作。 這是我的server.js文件和我的actionVideo.js文件。
Server.js:

let express = require('express')
let app = express()
let bodyParser = require('body-parser')
let session = require('express-session')
let cors = require('cors')
let upload = require('express-fileupload')

app.use(upload())
app.use(bodyParser.urlencoded({ extended: false })) // Middleware permettant de recuperer facilement les attributs de requête
app.use(bodyParser.json())
app.set('trust proxy', 1)
app.use(session({
  secret: 'yolo',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false, httpOnly: false, maxAge: 3600000 }
}))
app.use(cors())
let conn = require('./tools/DB').conn
let id_user = 7;

app.post('/t1', function(req, res, next) {
  console.log(req.body); 
  let id_user_subscribe = req.body.id;

  let sqlRegister = 'INSERT INTO lt_abonnement( id_user, id_userChaine) VALUES ( ?, ?)';

  conn.query(
    sqlRegister,
    [id_user, id_user_subscribe],
    function (error, results, fields) {
      if(error) {
        res.json({success : false })
        console.log(error);
      }
      else res.json({success : true})
    })
  }
)


console.log(__dirname + '/user/searchTools')
 app.get('/', express.static('../your-leaf/dist/')) // Sur la racine, rediriger vers la page web
 app.use('/dist', express.static('../your-leaf/dist/')) // Sur la racine, rediriger vers la page web
 app.use('/register', express.static('../your-leaf/dist/')) // Sur la racine, rediriger vers la page web
 app.use('/temp', express.static('./temp')) // Sur la racine, rediriger vers la page web
 app.use('/uploadVideo', express.static('../your-leaf/dist/')) // Sur la racine, rediriger vers la page web

var router = express.Router()

app.use('/user', router) // utilisation du module user
require(__dirname + '/user/user')(router)

app.use('/searchTools', router) // utilisation du module searchTools
require(__dirname + '/user/searchTools')(router)

app.use('/infoUser', router) // utilisation du module infoUser
require(__dirname + '/user/infoUser')(router)

app.use('/actionVideo', router) // utilisation du module actionVideo
require(__dirname + '/video/actionVideo')(router)

app.use('/infoVideo', router) // utilisation du module infoVideo
require(__dirname + '/video/infoVideo')(router)

app.use('/manageVideo', router) // utilisation du module manageVideo
require(__dirname + '/video/manageVideo')(router)


app.listen(4200)

和我的actionVideo.js在視頻文件夾中:

let conn = require('../tools/DB').conn
let id_user = 7;


function addSubscription(req, res) { // idUserSubscription
  console.log("fgrgtre"); 
  let id_user_subscribe = req.body.id;

  let sqlRegister = 'INSERT INTO lt_abonnement( id_user, id_userChaine) VALUES ( ?, ?)';

  conn.query(
    sqlRegister,
    [id_user, id_user_subscribe],
    function (error, results, fields) {
      if(error) {
        res.json({success : false })
        console.log(error);
      }
      else res.json({success : true})
    })
    res.json({rr: "re"})
  }

function addSubscription(req, res) { // idUserSubscription

}

function removeSubscription(req, res) { // idUserSubscription

}

function like(req, res) { // isLike, idVideo

}

function addComment(req, res) { // idVideo, text

}

function updateComment(req, res) { // idVideo, idComment, text

}

function removeComment(req, res) { // idVideo, idComment

}

function addVue(req, res) { // idVideo

}

module.exports = function (app) {

  app.post('/addSubscription', addSubscription)
  app.post('/removeSubscription', removeSubscription)
  app.post('/like', like)
  app.post('/addComment', addComment)
  app.post('/updateComment', updateComment)
  app.post('/removeComment', removeComment)
  app.post('/addVue', addVue)
}
console.log("fjoe");

如果我請求http:// localhost:4200 / t1,則可以使用,但如果我請求http:// localhost:4200 / actionVideo / addSubscription ,則無法使用。
謝謝 !

如果將同一路由器傳遞給每個模塊,則您在模塊( /addSubscription )中注冊的每個路由處理程序都會為每個頂級路由注冊。 例如/user/addSubscription/searchTools/addSubscription 這可能不是您想要的。

我將從每個模塊中導出一個新的路由器,並將其注冊在頂級路由器上。 這樣做可以確保沒有任何東西會干擾actionVideo.js定義的actionVideo.js

因此在actionVideo.js

const router = express.Router();

app.post('/addSubscription', addSubscription);
// ... and the other routes

module.exports = router;

server.js

const actionVideoRouter = require('./video/actionVideo');

app.use('/actionVideo', actionVideoRouter);

您還可以在快速文檔中查看示例: https : //expressjs.com/en/guide/routing.html#express-router

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM