0

У меня есть простая настройка сервера с помощью NodeJs, из которой я бы хотел отправить команду на терминал на сервере.Использование child_process.exec для отправки команды, возвращающей 404

Я пытаюсь использовать child_process.exec для отправки команды, которая при запуске с терминала работает правильно.

Проблема, с которой я столкнулась, заключается в том, что метод POST/unLock не найден. как ответ, который я получаю.

POST /unLock 404 1.770 ms - 1186 

Я включил код сервера и маршруты/виды я настроил ниже, я новичок в узел и пытается узнать, так что любая помощь будет оценена.

app.js
var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var index = require('./routes/index'); 
var users = require('./routes/users'); 
var exec = require('child_process').execSync; 

var util = require('util') 
//var exec = require('child_process').exec; 
var app = express(); 

app.use(bodyParser.json());  // to support JSON-encoded bodies 
app.use(bodyParser.urlencoded({  // to support URL-encoded bodies 
    extended: true 
})); 
// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 


app.get('/javascript/jquery.min.js', function (req, res) { 
     res.sendFile(__dirname + "/javascript" + "/jquery.min.js"); 

}); 

// 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('/', index); 
app.use('/users', users); 

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

app.post('/', function(req, res) { 
    console.log(req.body); 
    res.send(200); 

    }); 

//trying to send command here 
//recieiving 404 
app.post('/unLock', function (req, res) { 
exec("ls -la", {stdio:[0,1,2]}); 
res.send(200); 

console.log("button clicked"); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 


module.exports = app; 

index.js
var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res){ 
    res.render('index', { 
    title: 'Home' 
    }); 
}); 

router.get('/login', function(req, res){ 
    res.render('login', { 
    title: 'login' 
    }); 
}); 

router.get('/unLock', function(req, res){ 
    console.log("hello"); //this doesnt work 
}); 

router.get('/contact', function(req, res){ 
    res.render('contact', { 
    title: 'Contact' 
    }); 
}); 

module.exports = router; 

index.ejs
<!DOCTYPE html> 
<html> 
<script language="JavaScript" type="text/javascript" src="/javascripts/jquery.min.js"></script> 
<script> 

function unLock() { 
    $.ajax({ 
    type: 'POST', 
       url: '/unLock', 
    data: '', 
    success: function (data) { 
       } 
     }); 
} 
//call button.js 
</script> 

    <head> 
    <title><%= title %></title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    </head> 
    <body> 
    <h1><%= title %></h1> 
    <p>Welcome to SecureLock - beta 1.0</p> 
    <form><input type='button' value='unLock' onclick='unLock()'/></form> 
    </body> 

</html> 

Спасибо.

ответ

1

В ваших unLock() JS функции вы сделать вызов AJAX с помощью метода POST, но в вашем пути у вас есть

router.get('/unLock', function(req, res){ 
    ... 
}); 

так что нет ни одного маршрута, чтобы ответить на POST. Измените линию выше на router.postили измените метод AJAX на тип GET. Вероятно, последнее, если вы фактически не отправляете какие-либо данные на сервер с вызовом AJAX.