Javascript 使用Express和EJS从另一个js文件传递JSON
我正在从事一个使用CUPS命令行管理打印机的项目,我有多个“api”可以让我有不同的想法,现在我只想在视图中看到我解析的JSON结果,但我不知道如何通过Express传递该值,然后在EJS视图中呈现它: 我的api:Javascript 使用Express和EJS从另一个js文件传递JSON,javascript,node.js,json,express,ejs,Javascript,Node.js,Json,Express,Ejs,我正在从事一个使用CUPS命令行管理打印机的项目,我有多个“api”可以让我有不同的想法,现在我只想在视图中看到我解析的JSON结果,但我不知道如何通过Express传递该值,然后在EJS视图中呈现它: 我的api: constspawnsync=require(“子进程”).spawnSync; const parseStdout=require('../utils/utils.js'); 函数lpstat(){ 让printerList=spawnSync(“lpstat-p”{ 超时:10
constspawnsync=require(“子进程”).spawnSync;
const parseStdout=require('../utils/utils.js');
函数lpstat(){
让printerList=spawnSync(“lpstat-p”{
超时:10000,
编码:“utf-8”,
});
让parsedList=parseStdout(printerList);
let onlyPrinterList=parsedList.filter(函数(行){
返回line.match(line.match(/^printer/)| | line.match(/^impressora/);
});
让onlyPrinterNames=onlyPrinterList.map(函数(打印机){
返回打印机。匹配(/(?:\S+/)[0]。修剪();
});
process.on('退出',(代码)=>{
process.kill();
});
//这就是我想传递给视图的内容
返回JSON.stringify(仅限打印机名称);
}
我的app.js
const express=require('express');
常量app=express();
app.listen(3000);
应用程序集(“查看引擎”、“ejs”);
app.get('/lpstat',(req,res)=>{
//我应该在这里用什么?
res.render('lpstat')
});
我的lpstat.ejs
lpstat
lpstat结果:
res.render中的第二个参数定义了提供给模板的数据:
app.get('/lpstat',异步(req,res)=>{
//在此处调用api以填充变量
const printers=lpstat()
res.render('lpstat'{
印刷工
})
});
您将能够在您的ejs模板中使用它
lpstat结果:
您需要将
callApi
替换为用于获取数据的任何函数。我使用async/await来获得一个更简单的答案,也可以通过回调来完成。在技术说明中,您的“API”不是API,用于获取数据的URL是API的一部分。另外,从spawn
调用中获取数据的代码是。。特别的你不使用给你的例子做这件事有什么原因吗?(向下滚动到“运行<代码>ls-lh/usr”的示例)它是否改变了我现在使用的同步功能?我不能对同步进程使用回调,对吗?你能再举一个例子吗?因为你的函数是同步的,现在你可以删除等待部分了。我将编辑我的答案。